Agregar elemento a inittab en OpenSuse 12.1

Agregar elemento a inittab en OpenSuse 12.1

Actualmente estoy trabajando en un proyecto que es necesario agregar inittabpara 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, inittabel programa no se inicia.

Me registré /var/log/messagespero no dice que haya ningún problema, solo dice que se está recargando.

A continuación se muestra lo que agregué a mi inittabscript.

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-reloadysystemctl start myprogname.service

Si desea reiniciar automáticamente MyProgname debe agregar

Restart=restart-always

a la sección de servicio.

Respuesta3

Debe ejecutar telinit qpara indicarle a init que recargue /etc/inittab, no lo hará automáticamente. Creo que lo has hecho desde que mencionaste el Re-reading inittabmensaje (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 initproceso tiene un entorno muy limitado. Si es necesario, modifique el script contenedor para configurar todas las variables necesarias.

Respuesta4

cuando initlee unDominiopara ejecutarse en inittab, bifurca un shell y envía elDominiocomo parámetro del execcomando 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 "$@"

información relacionada