
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/syslog
dice 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 sudo
si 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 user
si 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.