cron script: dovecot: serviço não reconhecido

1

Estou usando o Let's Encrypt para gerar certificados SSL automaticamente a cada 60 dias usando um script de shell simples.

Depois que o script foi recarregado, ele tenta recarregar meus serviços usando os comandos que eu digitaria em um shell, por exemplo, service postfix reload e service dovecot reload .

No entanto, enquanto o primeiro funciona bem, o service dovecot reload não funciona, reclamando de um serviço não reconhecido.

O script está sendo executado como root como um cron-job, então eu esperaria que ele reconhecesse todos os mesmos serviços de quando eu estou logado como root, mas por algum motivo o dovecot não é reconhecido, mas outros são sem problema, o que significa que tenho que recarregar manualmente o dovecot antes que os certificados antigos expirem, o que limita o benefício do meu script!

O que há de diferente no dovecot que faria com que ele não fosse reconhecido pelo meu script, mas fosse reconhecido sem problemas quando eu logar como root eu mesmo?

Saída de lsb_release -a :

 No LSB modules are available.
 Distributor ID:    Ubuntu
 Description:   Ubuntu 14.04.5 LTS
 Release:   14.04
 Codename:  trusty

Saída de 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
    
por Haravikk 30.07.2016 / 09:24

1 resposta

6

Parece que o seu problema é porque os scripts cron são executados com um valor PATH diferente por padrão. Por exemplo, no Ubuntu como root você tem /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin em seu PATH por padrão. Mas o seu script cron executando como root tem um valor PATH mais limitado: /usr/bin:/bin .

Eu recomendo que você defina a variável de ambiente PATH no topo dos seus scripts cron:

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

Neste caso em particular, o problema é que o script service usa /sbin/initctl (Upstart), que não está no PATH usado pelo cron. Se esse comando falhar, ele tentará usar o script tradicional /etc/init.d/${SERVICE} . Mas nem todos os serviços incluem esse script antigo e é por isso que o seu script funciona com alguns serviços, mas não com outros.

    
por 29.09.2016 / 19:20