Actualmente estoy trabajando en un proyecto que es necesario agregar inittab
para que el programa se cargue durante el inicio.
El programa que estoy intentando iniciar es la aplicación ac# mono. He creado un script de inicio y si el script de inicio se ejecuta manualmente, el programa se inicia correctamente. Sin embargo, cuando lo introduzco, inittab
el programa no se inicia.
Me registré /var/log/messages
pero no dice que haya ningún problema, solo dice que se está recargando.
A continuación se muestra lo que agregué a mi inittab
script.
bes:2345:respawn:/home/bits/MyProgram/start.myprogram
Gracias por cualquier ayuda que usted nos pueda proporcionar
ACTUALIZAR A continuación se muestra el código del script de inicio que se encuentra en /home/bits/MyProgram.
#!/bin/sh
cd /home/bits/MyProgram
/usr/bin/mono EmailServer.exe "$@"
También intenté agregar > mylog.txt al final de la línea que comienza con /usr/bin/mono, por ejemplo
/usr/bin/mono EmailServer.exe "$@" > mylog.txt
Si ejecuto el script de inicio manualmente, incluso si no estoy en el directorio donde se encuentra el script de inicio, funciona bien, es justo cuando lo agrego a inittab y ejecuto telinit q nunca se inicia y el registro no se escribe, pero el registro se escribe si inicio el programa manualmente.
Gracias por cualquier ayuda que usted nos pueda proporcionar.
Respuesta1
Pon tu programa en alguna parte.
Copie y edite el archivo de plantilla de esqueleto para el control del trabajo inicial que se encuentra en/etc/init.d/esqueleto.
Modifique este archivo para indicar QUÉ nivel de ejecución desea... en su ejemplo, desea 2,3,4,5, hay opciones en la parte superior del archivo (en comentarios) para indicar los niveles de ejecución deseados
Coloque este nuevo archivo en/etc/init.dcon un nombre descriptivo. (mi nombre eleganteusado en el ejemplo)
Un método independiente de la plataforma para probar esto, o para habilitar/deshabilitar (si usó elesqueletoarchivo)
sudo /etc/init.d/myfancyname start
sudo /etc/init.d/myfancyname stop
sudo /etc/init.d/myfancyname restart
Existen métodos específicos de distribución para realizar estas mismas acciones, por ejemplo, Debian usaupdate-rc.d myfancyname [inicio|detener|habilitar|deshabilitar...]
Modificar inittab esgeneralmenteamaloIdea, si lo arruinas, el sistema ya no arranca y entonces tendrás DOS problemas. (¡no se necesitan expresiones regulares!)
Agregar scripts al subdirectorio /etc/init.d/ está más estandarizado, se puede usar con casi CUALQUIER versión de Linux, probablemente algunos *nix, tal vez algunos bsd.
Respuesta2
El problema es simple, estás usando OpenSuse 12.1 queusos sistemaden lugar de tu clásicoSistema de arranque System V.
Para instalar un nuevo lugar de servicio, cree el siguiente archivo en /etc/systemd/system/myprogname.service
[Unit]
Description=My progname service file
[Service]
ExecStart=/home/bits/MyProgram
[Install]
WantedBy=multi-user.target
Después corre systemctl daemon-reload
ysystemctl start myprogname.service
Si desea reiniciar automáticamente MyProgname debe agregar
Restart=restart-always
a la sección de servicio.
Respuesta3
Debe ejecutar telinit q
para indicarle a init que recargue /etc/inittab
, no lo hará automáticamente. Creo que lo has hecho desde que mencionaste el Re-reading inittab
mensaje (viste este mensaje, ¿verdad?) en los registros del sistema.
¿El problema es que su proceso no se inicia en absoluto o que su programa falla durante su inicio? Escriba un script contenedor que redirija los errores a un archivo de registro:
#!/bin/sh
exec >/var/log/myprogram.log 2>&1
exec /home/bits/MyProgram/start.myprogram
Compruebe si se crea el archivo de registro y vea si aparece algún error en él.
Una cosa que me viene a la mente es que su programa puede requerir variables de entorno configuradas en su sesión. El init
proceso tiene un entorno muy limitado. Si es necesario, modifique el script contenedor para configurar todas las variables necesarias.
Respuesta4
cuando init
lee unDominiopara ejecutarse en inittab
, bifurca un shell y envía elDominiocomo parámetro del exec
comando en ese shell. Entonces, comprueba qué sucede si lo haces manualmente:
sh -c exec /home/bits/MyProgram/start.myprogram
Otra cosa que intentaría sería omitir el script del iniciador por completo, con algo como esto en inittab:
bes:2345:respawn:/usr/bin/mono /home/bits/MyProgram/EmailServer.exe "$@"