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

1

Atualmente estou configurando um pi de framboesa rodando Debian wheezy como um servidor de IRC. Ele executa dois programas como um usuário comum em boot-ngircd e atheme.

ngircd e atheme ambos log para /var/log/syslog

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

Quando eu tento iniciar o ngircd (usando o local onde ele está instalado) 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 qualquer ngirc registros relacionados a todos. Atheme começa bem.

No entanto, se eu criar um script que não faça nada além de executar ngird (usando o mesmo caminho que usei anteriormente) e adicionar isso ao cron, ele funcionará bem (assim como executá-lo diretamente). Por que não é ngircd a partir do 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

    
por Journeyman Geek 08.11.2012 / 01:02

2 respostas

1

Não tenho o privilégio de comentar, por isso não posso pedir esclarecimentos, mas gostaria de sugerir a execução do daemon a partir de um initscript ou de rc.local e não do cron. O Cron é normalmente usado para executar coisas em um certo horário , regularmente. O tratamento de serviços e daemons geralmente é um trabalho para o seu sistema de inicialização .

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

Adicione isto a /etc/rc.local :

/bin/su -c '/path/to/your/executable args &' -s /bin/bash username >/dev/null 2>&1
    
por 08.11.2012 / 01:48
0

Cron executa algo que se comporta exatamente como

sudo - user /path/to/command

ou

su user
/path/to/command

Se você quiser verificar se seu comando é executado, é necessário testá-lo dessa maneira.

Você pode editar o crontab do usuário com

crontab -e

ou o crontab do sistema como raiz com

nano /etc/crontab

ou seu editor favorito diferente de nano (prefixado com sudo , se necessário). Note que estes dois crontabs diferem na sintaxe em que o crontab do sistema tem uma coluna extra entre o tempo de execução e o comando que especifica o usuário para executar o comando como. 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 você 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.

    
por 15.10.2015 / 09:09

Tags