單獨執行 cron 是否與透過 init.d 腳本執行相同的行為?

單獨執行 cron 是否與透過 init.d 腳本執行相同的行為?

我正在使用一些在伺服器上啟動 cron 的程式碼(在啟動時沒有運行它)。啟動 cron 的腳本會設定一些日誌記錄,然後簡單地呼叫cron.它不使用/etc/init.d/cronservice cron start

以這種方式啟動 cron 後,service cron status似乎service cron stop很高興能夠工作,並且 中指定的 PIDFILE/etc/init.d/cron存在。

我將日誌行放入/etc/init.d/cron,看起來cron獨立運行不會呼叫腳本。

# service cron status
script is running
 * cron is running
# service cron stop
script is running
 * Stopping periodic command scheduler cron                                                                                                                                                        [ OK ]
# cron
#

這裡發生了什麼事?這只是因為cron二進位檔案和 /etc/init.d/cron 腳本對 pidfile 的位置使用相同的約定嗎?

答案1

你的假設是正確的:維克西·克朗有一個固定的 pidfile 位置 ( /var/run/crond.pid),這也可以防止執行兩次。

初始化檔案腳本,也透過service使用標準來調用/lib/lsb/init-functions,其總結為:

  1. start動作只是調用/usr/sbin/cron(透過/sbin/start-stop-daemon助手),
  2. stop操作只是發送SIGTERM到 pidfile 中的 PID(通過/sbin/start-stop-daemon),
  3. 行動status金額為kill -0 $(cat /var/run/crond.pid).

但是,如果您有系統安裝後,標準初始化函數被重寫/lib/lsb/init-functions.d/40-systemd並運行計劃任務直接不再檢測到:

piotr@bialykiel:~$ sudo /usr/sbin/cron 
piotr@bialykiel:~$ sudo /etc/init.d/cron status
● cron.service - Regular background program processing daemon
   Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Sun 2020-02-02 09:12:43 CET; 5min ago
     Docs: man:cron(8)
  Process: 734 ExecStart=/usr/sbin/cron -f $EXTRA_OPTS (code=killed, signal=TERM)
 Main PID: 734 (code=killed, signal=TERM)

自從系統想要CGroup每項服務。更糟的是start,這restart是行不通的,因為計劃任務將在已經存在的 pidfile 上失敗並且stop不會殺死計劃任務您建立的實例。

相關內容