[1] 建立/var/www/test/hello.sh 檔:
#!/bin/bash
echo "Hello World"
[2] 假使要每一分鐘執行一次hello.sh
執行:
$ crontab -e
會進入編輯器,輸入:
# 每分鐘執行一次
*/1 * * * * echo "job every minute" >> /tmp/tz
# 每 0:15, 12:15 分執行一次
15 0,12 * * * /bin/bash -l -c 'cd /var/www/web_app && RAILS_ENV=development bundle exec rake schedule:check_something --silent'
# 星期一~五 9am~18pm
00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
格式 : 分(0-59), 時(0-23) ,日(1-31) ,月(1-12) ,週(0-6), Command
[3] 其他指令 :
執行排程並不會影響到你目前工作視窗,因為它是背景執行的,所以每隔一分鐘, 並不會看到 “Hello World” 字串出現在畫面上,但它會在每一次執行時紀錄在log裡
編輯 crontab 的工作內容,若要移除某些排程,直接刪除就可以了
crontab -e
查詢 crontab 的工作內容
crontab -l
移除所有的 crontab 的工作內容
crontab -r
查看 crontab
grep CRON /var/log/syslog
運作指令:
service crond start # 啟動服務
service crond stop # 關閉服務
service crond restart # 重啟服務
service crond reload # 重新載入配置
或
/etc/init.d/cron restart
Set Timezone
注意!! : 如果修改完主機的 timezone 卻沒有重新啟動 cron, 那麼 cron 仍然還會是吃舊的 timezone
參考此篇修改 timezone後要記得 restart : sudo service crond restart
另一種方式設定排程
除了crontab -e
可以設定每日排程外,也有另一種方法執行排程
系統預設提供這些時間點的排程,在etc/的cron.daily/ cron.hourly/ cron.monthly/ cron.weekly/
只需要把script丟進你想要的時間的資料夾裡,系統時間到就會自動執行
而各時段執行排程的時間點設定在/etc/crontab
# m h dom mon dow user command
=====================================
# /etc/cron.hourly,目錄下的腳本會每個小時讓執行一次,在每小時的17分鐘時運行;
17 * * * * root cd / && run-parts --report /etc/cron.hourly
# /etc/cron.daily,目錄下的腳本會每天讓執行一次,在每天的6點25分時運行;
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
# /etc/cron.weekly,目錄下的腳本會每週讓執行一次,在每週第七天的6點47分時運行;
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
# /etc/cron.mouthly,目錄下的腳本會每月讓執行一次,在每月1號的6點52分時運行;
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
run cron.daily
/etc/cron.daily 底下至少要有r-x權限
sudo chmod 755 your_cron
測試看哪一個沒有執行
run-parts --test --report /etc/cron.daily
強制重啟cron:
ps aux | grep cron
root 15082 0.0 0.0 18708 1068 ? Ss 13:23 0:00 cron
kill 15082
ps aux | grep cron # 若已經自動跑起來, 就不需要下面的步驟
/usr/sbin/cron &
另一種方法
在 /etc/cron.d/
底下建立新檔案
每天 01:05 刪除超過 15 天以上的 log, logs/以下的子資料夾裡的檔案也會清
5 1 * * * ec2-user /usr/bin/find /home/apps/php-api/app/logs/* -mtime +15 -exec rm {} \;
不用重啟 cron 就會生效了
ref: