por que não consigo iniciar um programa diretamente do cron?

por que não consigo iniciar um programa diretamente do cron?

Atualmente estou configurando um Raspberry Pi executando o Debian wheezy como um servidor de IRC. Ele executa dois programas como um usuário normal na inicialização - ngircd e atheme.

ngircd e atheme registram-se em/var/log/syslog

O ngircd é iniciado a partir do /usr/local/sbin/ngircd próprio executável( ), assim como o Atheme( /home/user/atheme/bin/atheme-services). Iniciar manualmente os programas como usuário a partir de um terminal funciona sem problemas.

Quando tento iniciar o ngircd (usando o local em que está instalado) a partir do cron, ele simplesmente não inicia - /var/log/syslogdiz que o cron job foi executado, mas nada acontece, não há mensagens de erro ou nenhum log relacionado ao ngirc. Atheme começa bem.

No entanto, se eu criar um script que não faça nada além de executar o ngird (usando o mesmo caminho que usei anteriormente) e adicioná-lo ao cron, ele funcionará bem (assim como executá-lo diretamente). Por que o ngircd não está iniciando no cron?

Não é um grande problema, mas torna o sistema um pouco mais confuso do que eu gostaria. Também é estranho que os dois programas se comportem de maneira diferente

Responder1

Não tenho o privilégio de comentar, portanto não posso pedir esclarecimentos, mas sugiro executar o daemon a partir de um initscript ou de rc.local, e não de cron. Cron geralmente é usado para executar coisasem um determinado momento, regularmente. O manuseio de daemons e serviços geralmente é um trabalho para vocêsistema de inicialização.

Para executar algo como um usuário normal na inicialização:

Adicione isso a/etc/rc.local:

/bin/su -c '/path/to/your/executable args &' -s /bin/bash username >/dev/null 2>&1

Responder2

Cron executa algo que se comporta exatamente como

sudo - user /path/to/command

ou

su user
/path/to/command

Se você quiser verificar se o seu comando é executado, você deve testá-lo desta forma.

Você pode editar o user-crontab com

crontab -e

ou o crontab de todo o sistema comoraizcom

nano /etc/crontab

ou seu editor favorito que não sejanano(preceda sudose necessário). Observe que esses dois crontabs diferem na sintaxe, pois o crontab de todo o sistema possui uma coluna extra entre o tempo de execução e o comando que especifica o usuário para executar o comando. Você deseja que seu tempo de execução seja definido como @reboot:

@reboot user /usr/local/sbin/ngircd
@reboot user /home/user/atheme/bin/atheme-services

Basta soltar a palavra userse estiver editando o crontab do usuário com crontab -e.

Como alternativa, você pode usar os initscripts do System V ou os arquivos de controle de serviço do systemd, dependendo do sistema que você possui.

informação relacionada