Me gustaría ejecutar un .sh
archivo usando bash al cerrar sesión y apagar Ubuntu. He buscado arriba y abajo en la web y solo he encontrado soluciones para KDE y GNOME. El script es simple, solo necesito saber si puedo agregar la línea de código al archivo "cerrar sesión / apagar" o si necesito hacer referencia a él en otro script.
30
systemd
) para que las personas la vean en la parte superior.Respuestas:
Para ejecutar un script al cerrar sesión:
Agregue la siguiente línea:
en el
/etc/lightdm/lightdm.conf
archivoDebe reiniciar lightdm para que este cambio surta efecto. Para hacer esto, ingrese en tty1 usando Ctrl+ Alt+ F1, inicie sesión con su nombre de usuario y contraseña y ejecute el siguiente comando:
Nota: use Ctrl+ Alt+ F7para cambiar a la sesión gráfica
Para ejecutar un script al reiniciar:
/etc/rc0.d
sudo chmod +x K99_script
K99
por ejecutarse en el momento adecuado.Para ejecutar un script al apagar:
/etc/rc6.d
sudo chmod +x K99_script
K99
por ejecutarse en el momento adecuado.Fuentes:
fuente
K
'Kill' yS
'Start'.K
para los niveles de ejecución 0, 1 y 6 yS
para los niveles de ejecución 2, 3, 4 y 5; ii) no necesita llamar al scriptK99_foo
, el número solo determina el orden en que se ejecutan los scripts. Debe elegir uno que sea más grande que los otros si desea que se ejecute en último lugar; iii) ¡ Runlevel 0 no es para reiniciar! ; Es para el cierre. 6 es para reiniciar. iv) los scripts no tienen por qué estar en los/etc/rcN.d
directorios. En su lugar, deberían estar/etc/init.d
y vincularse a/etc/rcN.d
.Cómo hacerlo con systemd
Si encuentra este hilo después de junio de 2016, Ubuntu y sus derivados, incluido Mint, usarán systemd para controlar la inicialización y el apagado del sistema. Tuve problemas con el viejo enfoque, así que investigué la forma del sistema.
Con systemd, crea uno o dos archivos para llamar a sus scripts utilizando las plantillas a continuación y ejecuta un comando. Simple.
Versión GUI
Primero cree los scripts que desea ejecutar al inicio y / o apagado. Creé .scopening_atstart y .scfullcopy_atend.
Luego, asegúrese de que ambos sean ejecutables haciendo clic con el botón derecho en el archivo, seleccionando propiedades y asegurándose de que, bajo permisos, haya marcado Permitir ejecutar el archivo como programa.
Los dos archivos que creé se completan y guardan el contenido de un disco RAM. También crean un archivo en mi directorio de inicio para probar que el servicio está funcionando. Eran de la forma:
Luego abrí mi administrador de archivos como root, abrí
/etc/systemd/system
y creé un archivo startup.service y un archivo save-ramdisk.service. Obviamente, puede elegir sus propios nombres y los nombres genéricos podrían haber incluido un archivo de inicio llamado johns_start.service y un archivo de apagado llamado johns_shutdown.service. Simplemente no elija nombres de servicios existentes.y
Puede usar los mismos archivos de servicio, sustituyendo la ruta completa de su script ejecutable por la mía.
Finalmente, para cada uno, ejecute el comando systemctl enable your_files_name (pero sin el servicio de sufijo). Entonces mi primero fue
systemctl enable startup
Reinicie la computadora una vez para iniciar los servicios. El servicio de inicio se ejecutará siempre que systemd ingrese al objetivo multiusuario y el servicio de detención cuando salga del objetivo multiusuario. Los archivos de servicio alternativos con diferentes condiciones de activación se describirán a continuación.
Versión CLI (línea de comando)
Esta descripción asume que usted opera desde su directorio personal en lugar de / home / john, usa sudo según sea necesario y su elección de editor donde escribo vim o svim.
Crea scripts de shell de inicio y apagado con la primera línea
#!/bin/sh
y hazlos ejecutables usandochmod +x my_new_filename
.Cree dos archivos como el anterior, o en este ejemplo, un archivo para manejar las tareas de inicio y apagado. Ejecutaré scripts en mi directorio de inicio, pero @don_crissti mostró algunas alternativas en Stack Exchange.
y copie en el contenido del archivo:
Luego habilite el servicio con el comando:
y reinicie su sistema después de lo cual los servicios estarán activos. Los comandos
systemctl is-enabled start_and_stop
ysystemctl is-active start_and_stop
se pueden utilizar para monitorear sus nuevos servicios.Cambio de las condiciones de activación para el apagado
Los archivos sobre todo usan la apertura o cierre del entorno multiusuario para iniciar la ejecución de los scripts. El siguiente archivo utiliza el comienzo de cuatro posibles procesos de apagado para iniciar sus scripts. Agregar o eliminar los objetivos en la línea Antes + la línea WantedBy le permitirá hacer distinciones más finas:
Este archivo fue propuesto en una respuesta en Unix y Linux por @Matthias, pero no pude ejecutarlo hasta que agregué una sección de Instalación.
Nuevamente, edite el script
/etc/systemd/service/
y habilítelo usandosystemctl enable your_file_name
. Cuando cambié los objetivos, usé elsystemclt disable file_name
comando y luego lo volví a habilitar, lo que lo vinculó a los directorios de destino. Reinicie y el servicio estará operativo.fuente
man systemd.unit
los archivos creados por el usuario se pueden colocar en$XDG_CONFIG_HOME/systemd/user
y otras ubicaciones de usuarios locales