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 的檔案。

file

直接編輯 crontab 檔案

可以直接編輯 crontab 檔案,位置在 /etc/crontab。編輯完要下指令重啟 cron 服務才會生效。

service cron restart

以上。

最後修改日期: 2021-02-11

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。