私はLet's Encryptを使用して単純なシェルスクリプトを使用して60日ごとに自動的にSSL証明書を生成します。
スクリプトはそれを再ロードした後、service postfix reload
私がシェルに入力したコマンド( - など)を使用してサービスを再ロードしようとしますservice dovecot reload
。
ただし、最初のサービスは正常に実行されているがservice dovecot reload
機能しないと認識できないサービスについて文句を言います。
スクリプトはcronジョブとしてrootとして実行されているので、rootとしてログインしたときと同じサービスをすべて認識したいと思いましたが、何らかの理由でdovecotは認識されませんが、他のサービスは問題がないのでDovecotを意味します。古い証明書が期限切れになる前に手動で再ロードする必要があるため、スクリプトの利点が制限されます。
私のスクリプトでは認識されませんが、rootとしてログインすると問題なく認識されるという点でdovecotの違いは何ですか?
出力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
PATH
問題は、cronスクリプトがデフォルトで異なる値で実行されるために発生するようです。たとえば、Ubuntuでは/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
デフォルトでPATHにルートがあります。ただし、rootとして実行されるcronスクリプトはPATH値がさらに制限されています/usr/bin:/bin
。
PATH
cronスクリプトの上部に環境変数を設定することをお勧めします。
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
この特別なケースでは、問題はcronで使用されているPATHにないservice
使用済みスクリプト(Upstart)にあります。/sbin/initctl
コマンドが失敗した場合は、既存のスクリプトを使用しようとします/etc/init.d/${SERVICE}
。ただし、すべてのサービスにレガシースクリプトが含まれているわけではありません。したがって、スクリプトは一部のサービスでは機能しますが、他のサービスでは機能しません。