Tengo un script ejecutándose en el momento del arranque, sin embargo, veo errores en el archivo de registro. Cuando lo ejecuto manualmente, funciona bien; probablemente el entorno haya cambiado.
¿Hay alguna manera de ejecutar dicho script en condiciones en las que se ejecuta al arrancar sin reiniciar?
El script se encuentra /etc/init.d
con un enlace simbólico en /etc/rc5.d/S97mounter.sh
.
Respuesta1
Podrías ejecutar como root
env - scriptname
Esto borrará su entorno antes de ejecutar el script; sin embargo, también mantendrá su archivo shell
. Para borrar el entorno y configurar el shell en sh
, haga lo siguiente:
env -i /bin/sh -c scriptname
Esto luego ejecutará el script usando /bin/sh
. Sin embargo, esto no simulará completamente el entorno de inicio, ya que no cuenta para los otros servicios que pueden no estar ejecutándose en ese momento.
Encontré una pregunta similar para simular el entorno crontab y hay una solución muy útil publicada pormmccoo.
Al usar esto, puede ejecutarlo en un script y reiniciar el host, luego usar el archivo de entorno para cargar su entorno:
parte de un script de arranque:
env > /var/tmp/bootenv
Luego, en tiempo de ejecución normal, para configurar el mismo entorno de arranque, haga esto:
env - `cat /var/tmp/bootenv` /bin/sh -c scriptname
Respuesta2
Algunas cosas que pueden ser diferentes cuando un programa se inicia a través de una sesión de usuario en lugar de un script de inicio:
- El programa hereda muchas variables de entorno (incluidas
PATH
,,HOME
…). - El programa hereda varios descriptores de archivos, incluido un terminal.
- Los límites pueden ser diferentes.
Para ejecutar un programa con un entorno mínimo y cerrar los descriptores de archivos estándar, puede usar algo como
env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin myprogram </dev/null >/dev/null 2>/dev/null
Consulte la init
página de manual u otra documentación de su sistema para ver qué variables de entorno define. Muchos programas destinados a ejecutarse como demonios necesitarán PATH
nada más. El PATH
valor anterior es el predeterminado para init en Debian.
Respuesta3
Sin más información sobre lo que hace su secuencia de comandos y los errores que obtiene, es difícil dar una respuesta precisa. Dicho esto, probablemente seaposiblerecrear el entorno, pero probablemente será muy difícil, ya que requerirá desmontar o vincular sistemas de archivos u otras cosas divertidas.
Una alternativa podría ser crear una máquina virtual usando algo comoVirtualBoxoKVMy realice su depuración usando eso, permitiéndole reiniciar la máquina virtual tan a menudo como sea necesario sin necesidad de reiniciar su máquina host.