Linux crontab 指令用法與範例

本篇介紹 Linux crontab 指令用法與範例,想要在 Linux 電腦中排程工作就可以使用 crontab,讓 Linux 系統定時地自動去執行指定的腳本或程式,詳細內容與範例如下,以下指令適用在 Ubuntu 或其它 Linux,

crontab 基本使用

列出目前自己的 crontab 設定內容,

1
crontab -l

編輯 crontab 內容,

1
crontab -e

以下是 Ubuntu 下 crontab 的範例,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
~/bin $ crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
*/5 * * * * /home/user/bin/xxx # 每隔 5 分鐘執行一次
59 23 * * * DISPLAY=:0 ~/crontab_script/xxx.sh # 23:59 時執行

常見 crontab 的時間設定範例

以下有一些常見的 crontab 設定範例,例如:
用 crontab 定時 5 分鐘執行一個 sh 腳本,

1
2
3
4
*/5 * * * * /path/to/your/script.sh # 每 5 分鐘執行一次
*/10 * * * * /path/to/your/script.sh # 每 10 分鐘執行一次
*/15 * * * * /path/to/your/script.sh # 每 15 分鐘執行一次
*/30 * * * * /path/to/your/script.sh # 每 30 分鐘/半小時執行一次

每小時執行一次,

1
2
3
4
0 * * * * /path/to/your/script.sh # 每小時執行一次
0 */3 * * * /path/to/script.sh # 每隔 3 個小時執行一次
0 */8 * * * /path/to/your/script.sh # 每隔 8 個小時執行一次
0 0 */1 * * /path/to/your/script.sh # 每隔 24 個小時執行一次

每天早上 6 點執行一次,

1
2
3
4
0 6 * * * /path/to/your/script.sh # 每天早上 6 點執行一次
0 11 * * * /path/to/your/script.sh # 每天早上 11 點執行一次
0 20 * * * /path/to/your/script.sh # 每天晚上 8 點執行一次
0 22 * * * /path/to/your/script.sh # 每天晚上 10 點執行一次

每週日凌晨 1 點執行一次,

1
0 1 * * 0 /path/to/your/script.sh

每個月的第一天早上 5 點執行一次,

1
0 5 1 * * /path/to/your/script.sh

將 crontab 的執行腳本狀況記錄在log日誌裡

你可以將輸出重新導向到一個日誌檔案,以便記錄腳本的執行情況和日誌。你可以修改 crontab 新增重新導向操作。如下範例,
>> 表示將輸出追加到檔案末尾,2>&1 表示將標準錯誤重導向到標準輸出。

1
*/5 * * * * /path/to/your/script.sh >> /path/to/logs/script.log 2>&1

同時你也要先建立好專門的資料夾來存放日誌,

1
mkdir -p /path/to/logs

如何更改 crontab 預設編輯器 editor

crontab -e 可能初次設定時手殘設定錯誤,之後才發現 crontab 開啟的是 nano / vi / vim 等不熟悉的編輯器。
在 Ubuntu 下你可以直接輸入 select-editor 來更換 editor,例如:我把 crontab editor 改成 vim 的話,就像下面這樣改,

1
2
3
4
5
6
7
8
9
10
$ select-editor

Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/code
4. /usr/bin/vim.basic
5. /usr/bin/vim.tiny

Choose 1-5 [2]: 4

改完以後,系統會將你選擇的編輯器紀錄在 ~/.selected_editor
你可以用 cat ~/.selected_editor 來檢查看看,

1
2
3
$ cat ~/.selected_editor
# Generated by /usr/bin/select-editor
SELECTED_EDITOR="/usr/bin/vim.basic"

在 CentOS 中,則可以用以下指令來指定預設的編輯器,

1
export VISUAL=vim

修改 PATH 環境變數

crontab 預設 PATH 只有 /usr/bin:/bin,所以當你想要用 /usr/local/bin/ 下的執行檔的話就會出現找不到執行檔的錯誤訊息,解決方法有兩種,
第一種,在腳本裡將 /usr/local/bin/ 加進 PATH 環境變數中,

1
PATH=$PATH:/usr/local/bin/

第二種,執行使用執行檔的絕對路徑,

1
/usr/local/bin/xxx

以上就是解決方式。

其他參考
Linux 設定 crontab 例行性工作排程教學與範例
https://blog.gtwang.org/linux/linux-crontab-cron-job-tutorial-and-examples/

以上就是 Linux crontab 指令用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
Linux 常用指令教學懶人包
在 macOS 上使用 crontab 設定定時任務,完整指南與範例分享!

Linux shell script 產生隨機亂數指令用法範例

本篇介紹 Linux shell script 產生隨機亂數指令用法範例,只要在 command line 或 shell script 裡印出 $RANDOM 變數就可以了,範例如下,以下指令適用在 linux,也適用於 macOS,

在 shell 中印出 $RANDOM 變數的指令如下,$RANDOM 變數它是一個介於 0~32767 間的亂數,

1
$ echo $RANDOM

如果要 Linux shell 產生 0~99 之間的隨機亂數的話,可以改這樣,

1
$ echo $(($RANDOM % 100))

如果要 Linux shell 產生 0~100 之間的隨機亂數的話,可以改這樣,

1
$ echo $(($RANDOM % 101))

如果要 Linux shell 產生 1~100 之間的隨機亂數的話,可以改這樣,

1
$ echo $(($RANDOM % 100 + 1))

Linux shell 產生 3 位數的隨機亂數

當需要生成 3 位數的隨機整數時(不包含 0-99),你可以使用下列方式以確保結果在 100 到 999 的範圍內,這將產生一個在 100 到 999 之間的隨機 3 位整數。

1
$ echo $(($RANDOM % 900 + 100))

Linux shell 產生 32767 以上的亂數

如果要產生 32767 以上的亂數呢?如果你需要產生一個大於 32767 的隨機亂數,你可以使用 /dev/urandom/dev/urandom 這個裝置可以產生更大範圍的隨機亂數。你可以使用 dd 指令來從 /dev/urandom 讀取隨機資料,指令如下,

1
$ echo $(od -An -N2 -i /dev/urandom | awk '{print $1}')

Linux shell 產生 6 位數的隨機亂數

如果要產生 6 位數的隨機亂數呢?要產生一個6位數的隨機整數,你可以使用 shuf 指令來產生一個 6 位數的隨機整數,範圍從 100000 到 999999。你可以根據需要自訂範圍,確保它是一個6位數,範例如下,

1
$ echo $(shuf -i 100000-999999 -n 1)

在 shell script 中可以這樣寫,

1
2
random_number=$(shuf -i 100000-999999 -n 1)
echo $random_number

macOS 沒有 shuf 指令,可以改用 awk 的方式,但需要結合其他指令,如下範例,
這範例是使用 awk 來產生一個 6 位數的隨機整數,範圍從 100000 到 999999。你可以根據需要自訂 minmax 的值來產生不同範圍的隨機亂數。

1
$ awk -v min=100000 -v max=999999 'BEGIN{srand(); print int(min+rand()*(max-min+1))}'

以上就是 Linux shell script 產生隨機亂數指令用法範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
Linux 常用指令教學懶人包

C/C++ ncurses 用法與範例教學

本篇 ShengYu 會介紹如何在 C/C++ 使用 ncurses library ,同時簡單介紹 ncurses 範例程式,以及怎麼編譯 ncurses 程式。

ncurses(new curses)是一個程式函式庫,它提供了API 讓程式設計師編寫獨立於終端的基於文字的使用者介面 (TUI,text-based user interfaces),例如:編譯 linux 的 make menuconfig。

curses 是一個建構於 termcap/terminfo 之上的通用程式庫。而 ncurses 是 curses 的衍生改良版本。以下就來介紹這強大的 ncurses library 吧!

Read More

C/C++ snake 貪食蛇遊戲範例

本篇 ShengYu 介紹 C/C++ 用 SFML 函式庫寫 snake 貪食蛇遊戲,使用 SFML 函式庫寫遊戲的好處就是能夠讓你的遊戲跨平台運行,例如在 Windows / macOS / Linux 上執行,本篇的貪食蛇遊戲圖片是在 Ubuntu 執行,但也可以運行在 Windows / macOS 上,接下來就開始介紹怎麼寫 snake 貪食蛇遊戲。

Read More

C/C++ SFML 基本範例教學

本篇 ShengYu 介紹 C/C++ SFML 基本範例教學,SFML (Simple and Fase Media Library) 是由 C++ 寫成的跨平台遊戲、多媒體函式庫,可支援多種程式語言,SFML 分成幾大模塊:系統、視窗、圖形、音訊與網路。

簡單介紹 SFML 以下幾個模塊:
System:一些基礎建設,例如:向量(vector)、字串、thread、timer
Window:管理視窗以及輸入(鍵盤、滑鼠、搖桿等)及 OpenGL
Graphics:硬體加速的 2D 圖形,例如:sprite, text, shapes
Audio:音訊、錄音、3D音效
Network:TDP 與 UDP socket 與 HTTP 跟 FTP

Read More

C/C++ Open MPI 用法與範例

本篇 ShengYu 介紹 C/C++ Open MPI 的用法與範例。Open MPI 是一個訊息傳遞介面函式庫 (Message Passing Interface) 的專案,Open MPI 結合了其他幾個項目的技術和資源。它被許多 TOP500 超級計算機使用。Open MPI 是做多行程 (Multiprocessing) 的平行,每個行程的記憶體不是共享的,此時就需要不同行程間的訊息傳遞 (message passing),另一個類似名稱的叫 OpenMP,OpenMP 是做多執行緒 (Multithreading) 的平行,且每個執行緒是共享記憶體 (shared memory)。

Read More

Python venv 虛擬環境教學

本篇 ShengYu 介紹 Python venv 虛擬環境(virtual environment)的用法與範例,在某些情況下我們需要建立一個獨立的測試環境來安裝執行 Python 程式,但是卻不想影響系統的 Python 環境,就可以使用 Python venv,以下介紹怎麼使用 Python 虛擬環境。

Read More

C/C++ SQLite 資料庫教學與範例

本篇 ShengYu 介紹 C/C++ SQLite 資料庫教學與範例,資料庫的操作無非就是 CRUD,CRUD 分別為 Create 新建資料/增加資料、Read 讀取資料/查詢資料、Update 更新資料、Delete 刪除資料,

CRUD 對應到SQL語法會像是這樣,
Create - 新建資料/增加資料,SQL語法:CREATE/INSERT
Read - 讀取資料/查詢資料,SQL語法:SELECT
Update - 更新資料,SQL語法:UPDATE
Delete - 刪除資料,SQL語法:DELETE

以上幾種都會介紹到,接下來介紹的順序會是 CREATE / INSERT / SELECT / UPDATE / DELETE

Read More