Shell-Script

cron 腳本:dovecot:無法辨識的服務

  • September 29, 2016

我使用 Let’s Encrypt 使用簡單的 shell 腳本每 60 天自動生成 SSL 證書。

在腳本重新載入這些之後,它會嘗試使用我將自己輸入到 shell 中的命令重新載入我的服務,即 -service postfix reloadservice 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}腳本。但並非所有服務都包含該舊腳本,這就是為什麼您的腳本適用於某些服務但不適用於其他服務的原因。

引用自:https://unix.stackexchange.com/questions/299226