cron 脚本:dovecot:无法识别的服务

cron 脚本:dovecot:无法识别的服务

我使用 Let's Encrypt 使用简单的 shell 脚本每 60 天自动生成 SSL 证书。

脚本重新加载这些后,它会尝试使用我在 shell 中输入的命令(ie-service postfix reload和 )来重新加载我的服务service dovecot reload

但是,虽然第一个运行正常,但是service dovecot reload却不工作,并抱怨无法识别的服务。

该脚本作为 cron 作业以 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

答案1

您的问题似乎是因为 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}脚本。但并非所有服务都包含旧脚本,这就是为什么您的脚本适用于某些服务但不适用于其他服务。

相关内容