Linux 的系統排程最小單位為分鐘,因此要實作以秒為單位為排程通常有以下兩種方法。
- 將要執行的工作放在 shell 中,crontab 設定每分鐘讀取 shell 檔一次,並在尾部放上 sleep 指令。
- 在 crontab 直接編輯,並在其中放置 sleep 指令達成以秒為單位的實作。
本文是介紹第二種方法。
crontab -e
指令
crontab -e
由於 crontab 最小排程單位為 1 分鐘,因此使用 sleep 指令指定所需要的秒數,再配合相對應的間隔,可達到以秒為單位的排程實作。
範例
* * * * * sleep 5; php /home/test.php >> /home/logs/cron_`date +\%Y\%m\%d`_log.txt
* * * * * sleep 10; php /home/test.php >> /home/logs/cron_`date +\%Y\%m\%d`_log.txt
* * * * * sleep 15; php /home/test.php >> /home/logs/cron_`date +\%Y\%m\%d`_log.txt
* * * * * sleep 20; php /home/test.php >> /home/logs/cron_`date +\%Y\%m\%d`_log.txt
* * * * * sleep 25; php /home/test.php >> /home/logs/cron_`date +\%Y\%m\%d`_log.txt
* * * * * sleep 30; php /home/test.php >> /home/logs/cron_`date +\%Y\%m\%d`_log.txt
* * * * * sleep 35; php /home/test.php >> /home/logs/cron_`date +\%Y\%m\%d`_log.txt
* * * * * sleep 40; php /home/test.php >> /home/logs/cron_`date +\%Y\%m\%d`_log.txt
* * * * * sleep 45; php /home/test.php >> /home/logs/cron_`date +\%Y\%m\%d`_log.txt
* * * * * sleep 50; php /home/test.php >> /home/logs/cron_`date +\%Y\%m\%d`_log.txt
* * * * * sleep 55; php /home/test.php >> /home/logs/cron_`date +\%Y\%m\%d`_log.txt
假如排程的秒數很多,例如 1 秒執行一次,則必須放 60 條指令,很冗長,但這是唯一可以做到精確秒數排程的方法。假如是放在 shell 裡執行,則會等要執行的工作跑完才會 sleep 秒數,而執行的時間長短並不確定。
建議排程時把 log 輸出至檔案中,以方便觀察工作排程是否有正確運作。crontab -e
指令編輯完,排程會立即生效。
這個指令編即後的排程檔存放在:/var/spool/cron
目錄下,以當前使用者身份為檔案名稱,例如這個例子使用 root 下達指令,則為產生一個名稱為 root 的檔案。
直接編輯 crontab 檔案
可以直接編輯 crontab 檔案,位置在 /etc/crontab
。編輯完要下指令重啟 cron 服務才會生效。
service cron restart
以上。
留言