文章目錄
- 一、概述
- 二、基于crontab的設置
- 2.1 基本命令說明
- 2.2 使用-e指令編輯命令
- 2.2.1 進入編輯模式
- 2.2.2 指令信息格式
- 2.2.4 開啟日志
- 1) 修改rsyslog配置文件
- 2) 重啟rsyslog
- 3) 查看日志
- 2.2.3 設置后之后重啟服務
- 三、示例
- 3.1 每隔一分鐘往文件中日期
- 3.2 使用-l查看任務列表
- 3.3 使用-r刪除所有任務
- 3.4 設置定時關機
- 總結
白衣沽酒綺羅生
百代繁華一朝都,誰非過客;千秋明月吹角寒,花是主人。
一、概述
crontab命令常見于Unix和類Unix的操作系統之中,用于設置周期性被執行的指令。該命令從標準輸入設備讀取指令,并將其存放于“crontab”文件中,以供之后讀取和執行。該詞來源于希臘語 chronos(χρνο),原意是時間。
通常,crontab儲存的指令被守護進程激活, crond常常在后臺運行,每一分鐘檢查是否有預定的作業需要執行。這類作業一般稱為cron jobs。
通過Crontab我們可以設置按照按照固定的周期執行某一些操作。
測試用Ubuntu系統信息:
Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-83-generic x86_64)
二、基于crontab的設置
2.1 基本命令說明
crontab [-u username] filepath
crontab [-u username] [-l|-e|-r]
- -u:此參數為root賬戶用于給其他用戶設置周期任務使用,僅root賬戶可用;
- -e:編輯crontab的內容;
- -l:查看crontab的內容;
- -r:移除所有crontab的內容,若緊要移除其中一項,需要使用-e進行編輯;
- filepath:通過文件路徑指定要定期致性的文件,建議使用絕對路徑。
2.2 使用-e指令編輯命令
2.2.1 進入編輯模式
zero@ubuntu:/etc$ crontab -e # 直接使用-e指令編輯信息
no crontab for zero - using an empty one # 初次使用提示當前沒有信息Select an editor. To change later, run 'select-editor'. # 要求選擇默認的編輯器1. /bin/nano <---- easiest2. /usr/bin/vim.basic3. /usr/bin/vim.tiny4. /bin/edChoose 1-4 [1]: 2 # 我選了了2
crontab: installing new crontab
zero@ubuntu:/etc$
設置完之后會自動打開編輯器用于編輯指令,可以看到基本的提示內容:
這是vim編輯界面,編輯完成后“:wq”就可以保存退出了。
2.2.2 指令信息格式
crontab的工作內容包括6個字段,5個時間參數以及一個指令:
字段 | 分鐘 | 小時 | 日期 | 月份 | 周 | 指令 |
---|---|---|---|---|---|---|
數字范圍 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 | 具體的指令 |
特殊字符和注意信息:
- 周的數字代表的是星期幾,0和7都代表星期天;
- *(星號):型號標識任何的意思,就是無論什么數值都符合條件;
- ,(逗號):標識分割時段的意思,如3,6標識的是3和6都可以;
- -(減號):代表一定的范圍段,包頭尾,如3-5,標識3,4,5都可以;
- */n(斜線):標識間隔,即間隔n致性一次,如分鐘設置為*/5或者0-59/5就是標識每個5分鐘執行一次。
2.2.4 開啟日志
ubuntu默認沒有開啟crontab的日志,需要手動開啟日志。
通過配置rsyslog,啟用crontab的日志。
1) 修改rsyslog配置文件
# 注意修改日志配置文件需要使用root權限。
zero@ubuntu:/var/log$ sudo vim /etc/rsyslog.d/50-default.conf
去掉cron日志行簽名的星號,然后“:wq”保存退出。
cron.* /var/log/cron.log
2) 重啟rsyslog
使用service命令重啟rsyslog服務。
zero@ubuntu:/var/log$ service rsyslog restart
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'rsyslog.service'.
Authenticating as: Zero (zero)
Password:
==== AUTHENTICATION COMPLETE ===
3) 查看日志
重啟之后,crontab有操作時,會發現文件中出現了日志文件。
使用tail查看日志
zero@ubuntu:/var/log$ tail /var/log/cron.log
Nov 22 03:10:01 ubuntu CRON[2030]: (root) CMD (test -e /run/systemd/system || SERVICE_MODE=1 /sbin/e2scrub_all -A -r)
Nov 22 03:10:13 ubuntu crontab[2036]: (root) BEGIN EDIT (root)
Nov 22 03:10:25 ubuntu crontab[2036]: (root) REPLACE (root)
Nov 22 03:10:25 ubuntu crontab[2036]: (root) END EDIT (root)
2.2.3 設置后之后重啟服務
設置完指令之后需要重啟crontab服務才能正常執行任務。
zero@ubuntu:/mnt$ service cron restart # 重啟服務的指令
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'cron.service'.
Authenticating as: Zero (zero)
Password:
==== AUTHENTICATION COMPLETE ===
zero@ubuntu:/mnt$
**注:**亦可以通過service查看狀態:
zero@ubuntu:/mnt$ service cron status
● cron.service - Regular background program processing daemon# 開機自啟動Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)# 狀態:運行中Active: active (running) since Tue 2023-11-21 02:59:00 UTC; 22h agoDocs: man:cron(8)Main PID: 861 (cron)Tasks: 1 (limit: 4516)Memory: 500.0KCPU: 491msCGroup: /system.slice/cron.service└─861 /usr/sbin/cron -f -PNov 22 01:12:01 ubuntu CRON[2819]: (CRON) info (No MTA installed, discarding output)
Nov 22 01:12:01 ubuntu CRON[2819]: pam_unix(cron:session): session closed for user zero
Nov 22 01:13:01 ubuntu CRON[2829]: pam_unix(cron:session): session opened for user zero(uid=1000) by (uid=0)
Nov 22 01:13:01 ubuntu CRON[2830]: (zero) CMD (sudo cat "test" >> /mnt/test.txt)
Nov 22 01:13:01 ubuntu CRON[2829]: (CRON) info (No MTA installed, discarding output)
Nov 22 01:13:01 ubuntu CRON[2829]: pam_unix(cron:session): session closed for user zero
Nov 22 01:14:01 ubuntu CRON[2832]: pam_unix(cron:session): session opened for user zero(uid=1000) by (uid=0)
Nov 22 01:14:01 ubuntu CRON[2833]: (zero) CMD (sudo cat "test" >> /mnt/test.txt)
Nov 22 01:14:01 ubuntu CRON[2832]: (CRON) info (No MTA installed, discarding output)
Nov 22 01:14:01 ubuntu CRON[2832]: pam_unix(cron:session): session closed for user zero
三、示例
3.1 每隔一分鐘往文件中日期
# m h dom mon dow command
*/1 * * * * date >> /tmp/test.txt
幾分鐘之后查看文件結果如下:
zero@ubuntu:/tmp$ cat test.txt
Wed Nov 22 02:19:01 AM UTC 2023
Wed Nov 22 02:20:01 AM UTC 2023
Wed Nov 22 02:21:01 AM UTC 2023
Wed Nov 22 02:22:01 AM UTC 2023
Wed Nov 22 02:23:02 AM UTC 2023
Wed Nov 22 02:24:01 AM UTC 2023
Wed Nov 22 02:25:01 AM UTC 2023
Wed Nov 22 02:26:01 AM UTC 2023
Wed Nov 22 02:27:01 AM UTC 2023
Wed Nov 22 02:28:01 AM UTC 2023
**注:**所操作的文件需要具有權限。
3.2 使用-l查看任務列表
使用-l可以直接查看具體的任務,注意任務是按照用戶劃分的,不同用戶查看具有不一樣的結果:
這是默認用戶查看:
zero@ubuntu:/tmp$ crontab -l
40 10 * * * sudo shutdown -h now
這是以管理員權限查看:
zero@ubuntu:/tmp$ sudo crontab -l
# m h dom mon dow command
管理員是空的。
3.3 使用-r刪除所有任務
使用-r參數會刪除crontab中的所有的任務清單。
刪除后再次查看就會提示沒有任何任務。
zero@ubuntu:/tmp$ crontab -r
zero@ubuntu:/tmp$ crontab -l
no crontab for zero
3.4 設置定時關機
關機需要使用root權限,設置時需要用sudo切換權限。
zero@ubuntu:~$ sudo crontab -l
關機指令如下:
# 分 時8 4 * * * shutdown -h now
總結
使用crontab可以便捷的設置定時任務,有助于執行一些定時任務,指令也可以通過腳本,這樣可以一次執行多個指令并進行一些比較復雜的操作。