關于crontab定時任務命令解讀
一、crontab概述
crontab:
是一個用于管理、編輯和查詢用戶定時任務的命令行工具。通過 crontab 命令,用戶可以添加、修改、刪除和列出定時任務,以實現自動化執(zhí)行特定任務。cron:
是一個在后臺運行的系統服務,負責按照預設時間規(guī)則來執(zhí)行指定的定時任務。cron 守護進程會在任務所指定的時間到達時自動執(zhí)行相應的命令或腳本文件,并將執(zhí)行結果記錄在日志文件中。
因此,crontab 主要用于管理和維護定時任務的配置信息,而 cron 則負責實際執(zhí)行這些定時任務。
需要注意的是,在某些 Linux 發(fā)行版中,cron 和 crontab 可能被打包成同一個軟件包,并且往往默認安裝在系統中。
因此,在使用 crontab 命令之前,建議先確認系統是否安裝了 cron 服務。
總之,cron 和 crontab 都是用于管理和維護定時任務的重要工具和服務,它們的作用互補且不可替代。
二、crontab安裝
yum install cronie
三、crontab常用操作命令
1.啟動、關閉以及狀態(tài)查看
# 狀態(tài)查看 systemctl status crond # 啟動 systemctl start crond # 關閉 systemctl stop crond # 重啟 systemctl restart crond
2.列出當前用戶的所有定時任務
crontab -l
3.編輯當前用戶的定時任務
crontab -e
運行上述命令后,會打開一個文本編輯器,可以在其中輸入要執(zhí)行的命令和時間規(guī)則。
格式如下:
* * * * * command
其中,五個星號分別表示分鐘、小時、日、月、周幾,command 表示要執(zhí)行的命令或腳本文件路徑。
例如,以下是每天凌晨 3 點執(zhí)行 /backup.sh 腳本的定時任務配置:
0 3 * * * /backup.sh
4.刪除當前用戶的所有定時任務
crontab -r
5.查看幫助信息
crontab -h
需要注意的是,crontab 命令只適用于當前用戶。
如果需要編輯其他用戶的定時任務,需要使用 root 權限。
可以使用以下命令來切換到 root 用戶,并編輯指定用戶的定時任務:
su - crontab -u username -e
其中,username 表示要編輯定時任務的用戶名。
總之,在 CentOS 中,可以使用 crontab 命令來添加、修改和刪除定時任務。
可以使用 crontab -e 命令編輯當前用戶的定時任務,crontab -u username -e 命令編輯其他用戶的定時任務,并且可以使用 crontab -l 和 crontab -r 命令查看當前用戶的定時任務列表和刪除所有定時任務。
四、添加定時任務
在 Linux 系統中,可以使用兩種方法來新增調度任務:
1. 使用 crontab -e 命令
可以使用 crontab 命令來添加、編輯和刪除當前用戶的定時任務。具體步驟如下:
- 運行命令
crontab -e
,進入 crontab 編輯器; - 在編輯器中添加要執(zhí)行的任務,例如:
* * * * * echo "hello world" >> /home/tmp.txt
; - 保存并退出編輯器,此時新增的定時任務就會生效。
需要注意的是,crontab 命令只能用于當前登錄用戶的定時任務管理。
2. 直接編輯 /etc/crontab 文件
可以直接編輯 /etc/crontab 文件來新增系統級別的定時任務。具體步驟如下:
- 使用 root 權限運行命令
vi /etc/crontab
,打開 /etc/crontab 文件; - 在文件末尾添加要執(zhí)行的任務,例如:
* * * * * root echo "hello world" >> /home/tmp.txt
;必須指定用戶,要不然不執(zhí)行 - 保存并關閉文件,此時新增的定時任務就會生效。
需要注意的是,直接編輯 /etc/crontab 文件新增的定時任務是針對系統級別的,可以被所有用戶共享。同時,如果需要修改或刪除該任務,也需要使用 root 權限進行操作。
無論是使用 crontab 命令還是直接編輯 /etc/crontab 文件,都需要設置正確的時間規(guī)則和要執(zhí)行的命令。同時,還需要注意文件的格式和編碼方式,避免出現語法錯誤或者亂碼等問題。
以上兩種方式都無需重啟或加載,直接生效
注意:當程序在你所指定的時間執(zhí)行后,系統會發(fā)一封郵件給當前的用戶,顯示該程序執(zhí)行的內容,若是你不希望收到這樣的郵件,請在每一行空一格之后加上 > /dev/null 2>&1
即可,如:
`* * * * * root echo "hello world" >> /home/tmp.txt > /dev/null 2>&1`
五、時間格式詳解
# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
時間格式如下:
t1 t2 t3 t4 t5 program
其中 t1 是表示分鐘,t2 表示小時,t3 表示一個月份中的第幾日,t4 表示月份,t5 表示一個星期中的第幾天。program 表示要執(zhí)行的程序。
- 當 t1 為 * 時表示每分鐘都要執(zhí)行 program,t2 為 * 時表示每小時都要執(zhí)行程序,其余類推
- 當 t1 為 a-b 時表示從第 a 分鐘到第 b 分鐘這段時間內要執(zhí)行,t2 為 a-b 時表示從第 a 到第 b 小時都要執(zhí)行,其余類推
- 當 t1 為 */n 時表示每 n 分鐘個時間間隔執(zhí)行一次,t2 為 */n 表示每 n 小時個時間間隔執(zhí)行一次,其余類推
- 當 t1 為 a, b, c,… 時表示第 a, b, c,… 分鐘要執(zhí)行,t2 為 a, b, c,… 時表示第 a, b, c…個小時要執(zhí)行,其余類推
示例如下:
// 每月最后一天定時執(zhí)行一次 0 0 L * * // 每月每天的午夜 0 點 20 分, 2 點 20 分, 4 點 20 分....執(zhí)行 echo "hello world": 20 0-23/2 * * * echo "hello world"
六、使用異常記錄
1./etc/crontab方式添加的定時任務不執(zhí)行
# 不執(zhí)行 * * * * * echo "hello world" >> /home/tmp.txt; # 執(zhí)行 必須指定用戶 * * * * * root echo "hello world" >> /home/tmp.txt;
2.如果我們使用 crontab 來定時執(zhí)行腳本,無法執(zhí)行,但是如果直接通過命令(如:./test.sh)又可以正常執(zhí)行,這主要是因為無法讀取環(huán)境變量的原因。
- 所有命令需要寫成絕對路徑形式,如: /usr/local/bin/docker。
- 在 shell 腳本開頭使用以下代碼:
#!/bin/sh . /etc/profile . ~/.bash_profile
- 在 /etc/crontab 中添加環(huán)境變量,在可執(zhí)行命令之前添加命令 . /etc/profile;/bin/sh,使得環(huán)境變量生效,例如:
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Ubuntu 12.04 64位 對Python 源代碼編譯詳解
這篇文章主要介紹了Ubuntu 12.04 64位 對Python 源代碼編譯的相關資料,需要的朋友可以參考下2017-01-01