저는 Let's Encrypt를 사용하여 간단한 쉘 스크립트를 사용하여 60일마다 자동으로 SSL 인증서를 생성합니다.
스크립트는 이를 다시 로드한 후 service postfix reload
내가 셸에 입력한 명령(예: - 및 )을 사용하여 내 서비스를 다시 로드 하려고 시도합니다 service dovecot reload
.
그러나 첫 번째 서비스는 제대로 실행되지만 service dovecot reload
작동하지 않고 인식할 수 없는 서비스에 대해 불평합니다.
스크립트가 cron 작업으로 루트로 실행되므로 루트로 로그인할 때와 동일한 서비스를 모두 인식하기를 원했지만 어떤 이유에서인지 dovecot은 인식되지 않지만 다른 서비스는 문제가 없으므로 Dovecot을 의미합니다. 이전 인증서가 만료되기 전에 수동으로 다시 로드해야 하므로 스크립트의 이점이 제한됩니다!
내 스크립트에서는 인식하지 못하지만 루트로 로그인하면 문제 없이 인식된다는 점에서 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에 루트가 있습니다. 그러나 루트로 실행되는 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}
. 그러나 모든 서비스에 레거시 스크립트가 포함되어 있는 것은 아닙니다. 따라서 스크립트가 일부 서비스에서는 작동하지만 다른 서비스에서는 작동하지 않는 것입니다.