cron 腳本:dovecot:無法辨識的服務
我使用 Let’s Encrypt 使用簡單的 shell 腳本每 60 天自動生成 SSL 證書。
在腳本重新載入這些之後,它會嘗試使用我將自己輸入到 shell 中的命令重新載入我的服務,即 -
service postfix reload
和service dovecot reload
.然而,雖然這些工作中的第一個很好,但
service dovecot reload
不起作用,抱怨服務無法辨識。該腳本作為 cron-job 以 root 身份執行,因此我希望它能夠辨識與我自己以 root 身份登錄時相同的所有服務,但由於某種原因無法辨識 dovecot,但其他服務沒有問題,這意味著我必須在舊證書過期之前手動重新載入 dovecot,這有點限制了我的腳本的好處!
dovecot 有什麼不同會導致我的腳本無法辨識它,但是當我自己以 root 身份登錄時可以毫無問題地辨識它?
輸出
lsb_release -a
:No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 Codename: trusty
輸出
ps aux | grep dovecot
:root 860 0.0 0.1 22144 1052 ? Ss May09 1:33 /usr/sbin/dovecot -F -c /etc/dovecot/dovecot.conf dovecot 1466 0.0 0.0 9288 572 ? S May09 0:11 dovecot/anvil vmail 22753 0.0 0.4 23904 4116 ? S 16:58 0:00 dovecot/imap vmail 22754 0.0 0.5 25408 5764 ? S 16:58 0:00 dovecot/imap dovenull 24108 0.0 0.3 19188 3812 ? S Sep26 0:10 dovecot/imap-login root 24109 0.0 0.1 9416 1472 ? S Sep26 0:00 dovecot/log root 24111 0.0 0.2 23772 2660 ? S Sep26 0:01 dovecot/config vmail 30218 0.0 0.3 23244 3676 ? S 22:40 0:00 dovecot/imap vmail 30219 0.0 0.3 23252 3540 ? S 22:40 0:00 dovecot/imap root 30293 0.0 0.4 27924 4416 ? S 22:44 0:00 dovecot/lmtp dovecot 30294 0.0 0.4 39632 4756 ? S 22:44 0:00 dovecot/auth root 30295 0.1 0.4 39728 4900 ? S 22:44 0:00 dovecot/auth -w
您的問題似乎是因為 cron 腳本
PATH
預設使用不同的值執行。例如,在 Ubuntu 上/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
,預設情況下您在 PATH 中具有 root 權限。但是您以 root 身份執行的 cron 腳本具有更有限的 PATH 值:/usr/bin:/bin
.我建議您
PATH
在 cron 腳本的頂部設置環境變數:PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
在這種特殊情況下,問題在於
service
腳本使用/sbin/initctl
(Upstart),它不在 cron 使用的 PATH 中。如果該命令失敗,它會嘗試使用傳統/etc/init.d/${SERVICE}
腳本。但並非所有服務都包含該舊腳本,這就是為什麼您的腳本適用於某些服務但不適用於其他服務的原因。