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 設定定時任務,完整指南與範例分享!