cronスクリプト:dovecot:認識できないサービス

cronスクリプト:dovecot:認識できないサービス

私は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

PATHcronスクリプトの上部に環境変数を設定することをお勧めします。

PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'

この特別なケースでは、問題はcronで使用されているPATHにないservice使用済みスクリプト(Upstart)にあります。/sbin/initctlコマンドが失敗した場合は、既存のスクリプトを使用しようとします/etc/init.d/${SERVICE}。ただし、すべてのサービスにレガシースクリプトが含まれているわけではありません。したがって、スクリプトは一部のサービスでは機能しますが、他のサービスでは機能しません。

おすすめ記事