¿Por qué no puedo iniciar un programa directamente desde cron?

¿Por qué no puedo iniciar un programa directamente desde cron?

Actualmente estoy configurando una raspberry pi ejecutando Debian wheezy como servidor IRC. Ejecuta dos programas como usuario normal al arrancar: ngircd y atheme.

ngircd y atheme inician sesión en/var/log/syslog

ngircd se inicia desde el /usr/local/sbin/ngircd propio ejecutable (), al igual que Atheme ( /home/user/atheme/bin/atheme-services). Iniciar manualmente los programas como usuario desde una terminal funciona sin problemas.

Cuando intento iniciar ngircd (usando la ubicación en la que está instalado) desde cron, simplemente no se inicia; /var/log/syslogdice que se ejecutó el trabajo cron, pero no sucede nada, no hay mensajes de error ni ningún registro relacionado con ngirc. El tema empieza bien.

Sin embargo, si creo un script que no hace más que ejecutar ngird (usando la misma ruta que usé antes) y lo agrego a cron, funciona bien (al igual que ejecutarlo directamente). ¿Por qué ngircd no comienza desde cron?

No es un gran problema, pero hace que el sistema sea un poco más complicado de lo que me gustaría. También es extraño que los dos programas se comporten de manera diferente.

Respuesta1

No tengo el privilegio de comentar, por lo que no puedo pedir aclaraciones, pero sugeriría ejecutar el demonio desde un initscript o desde rc.local, y no desde cron. Cron se suele utilizar para ejecutar cosas.en un momento determinado, regularmente. El manejo de demonios y servicios suele ser un trabajo para susistema de inicio.

Para ejecutar algo como usuario normal al arrancar:

Añade esto a/etc/rc.local:

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

Respuesta2

Cron ejecuta algo que se comporta exactamente como

sudo - user /path/to/command

o

su user
/path/to/command

Si desea comprobar si su comando se ejecuta, debe probarlo de esta manera.

Puedes editar el crontab de usuario con

crontab -e

o el crontab de todo el sistema comoraízcon

nano /etc/crontab

o tu editor favorito que no seanano(anteponga sudosi es necesario). Tenga en cuenta que estos dos crontabs difieren en sintaxis en que el crontab de todo el sistema tiene una columna adicional entre el tiempo de ejecución y el comando que especifica con qué usuario ejecutar el comando. Quiere que su tiempo de ejecución se establezca en @reboot:

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

Simplemente suelte la palabra usersi está editando el crontab del usuario con crontab -e.

Como alternativa, puede utilizar los scripts de inicio de System V o los archivos de control de servicios de systemd, dependiendo del sistema que tenga.

información relacionada