
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/syslog
diz 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 sudo
se 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 user
se 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.