Saltar al contenido

Ejecutar un comando antes de apagar

Estate atento ya que en este enunciado hallarás la contestación que buscas.Este artículo ha sido probado por nuestros expertos para garantizar la calidad y exactitud de nuestro post.

Solución:

Linux Mint está basado en Ubuntu, así que supongo que el sistema de nivel de ejecución es probablemente el mismo. En Ubuntu, los scripts para los diferentes niveles de ejecución se ejecutan según su presencia en el /etc/rc[0-6].d directorios. El nivel de ejecución 0 corresponde al apagado y el 6 al reinicio.

Por lo general, el script en sí se almacena en /etc/init.dy luego los enlaces simbólicos se colocan en los directorios correspondientes a los niveles de ejecución que necesita.

Entonces, en su caso, escriba su script, guárdelo en /etc/init.d/luego crea un enlace simbólico en cada uno de /etc/rc0.d y /etc/rc6.d (si quiere ambos) apuntando a su script.

Los scripts en cada directorio de nivel de ejecución se ejecutarán en orden ascibético, por lo que si le importa el orden dentro del nivel de ejecución, elija el nombre de su enlace simbólico en consecuencia.

Ahora que las variantes de Ubuntu y Mint se han trasladado a systemd, encontré que mis soluciones anteriores basadas en lo anterior son menos satisfactorias. Busqué en la web para averiguar cómo hacerlo con systemd y terminé combinando la sabiduría de otros y documentándolo como una publicación de blog en blogspot.com.au que contiene el siguiente tutorial.

Con systemd, crea uno o dos archivos para llamar a sus scripts utilizando las plantillas a continuación y ejecuta un par de comandos. Sencillo.


Versión de interfaz gráfica de usuario

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 derecho en el archivo, seleccionando propiedades y asegurándose de que, en permisos, haya marcado Permitir ejecutar el archivo como un programa.

Los dos archivos que creé llenan y guardan el contenido de un ramdisk. También crean un archivo en mi directorio de inicio para demostrar que el servicio está funcionando. Eran de la forma:

#!/bin/sh
cp -pru /home/john/zRamdisk/subdirectory1/* /home/john/.wine/drive_c/subdirectory1/
rm /home/john/stop_time
date +%D' '%T > /home/john/stop_time

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.

[Unit]
Description=Startup Applications

[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/home/john/.scopening_atstart

[Install]
WantedBy=multi-user.target

y

[Unit]
Description=Save Ramdisk to Wine drive C

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/john/.scfullcopy_atend

[Install]
WantedBy=multi-user.target

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 sufijo service). Así que mi primera fue systemctl enable startup

Reinicie la computadora una vez para iniciar los servicios. El servicio de inicio se ejecutará cada vez 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 comandos)

Esta descripción asume que opera desde su directorio de inicio en lugar de /home/john, usa sudo según sea necesario y su elección de editor donde escribo vim o svim.

Crear scripts de shell de inicio y apagado con la primera línea #!/bin/sh y hacerlos ejecutables usando chmod +x my_new_filename.

Crear dos archivos como arriba, o en este ejemplo, un archivo para manejar las tareas de inicio y apagado. Ejecutaré scripts en mi directorio de inicio, pero @don_crissti muestra algunas alternativas en Stack Exchange.

vim /etc/systemd/system/start_and_stop.service

y copiar en el contenido del archivo:

[Unit]
Description=Run Scripts at Start and Stop

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/home/john/.startup_commands  #your paths and filenames
ExecStop=/home/john/.shutdown_commands

[Install]
WantedBy=multi-user.target

Luego habilite el servicio con el comando:

systemctl enable start_and_stop

y reinicie su sistema después de lo cual los servicios estarán activos. los comandos systemctl is-enabled start_and_stop y systemctl is-active start_and_stop se puede utilizar para monitorear sus nuevos servicios.


Cambio de las condiciones de activación para el apagado

Los archivos sobre todo utilizan la apertura o el 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 se propuso en la segunda respuesta de esta publicación, pero no pude ejecutarlo hasta que agregué una sección de instalación.

Nuevamente, edite el script en /etc/systemd/service/ y habilitarlo usando systemctl enable your_file_name. Cuando cambié los objetivos usé el systemclt disable file_name comando y luego lo volvió a habilitar, lo que lo vinculó a los directorios de destino. Reinicie y el servicio estará operativo.

[Unit]
Description=Do something required
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
#   executed before the target state is entered
# Also consider kexec.target

[Service]
Type=oneshot
ExecStart=/home/john/.my_script  #your path and filename

[Install]
WantedBy=halt.target reboot.target shutdown.target

necesitas usar rc.shutdown el script de apagado para el Kernel de Linux. Citando la página de manual de OpenBSD:

Cuando el sistema se apaga usando los comandos reboot(8) o halt(8), o cuando se indica a init(8) que lo haga, o cuando se emite un alto solicitado por el teclado (si la arquitectura lo admite), rc( 8) se invoca con el argumento “shutdown”.

Entonces, simplemente abra su rc.shutdown y agregue los comandos de shell que desee ejecutar.

ACTUALIZACIÓN: dado que Linux Mint se basa en Ubuntu, que tiene un procedimiento de inicio/apagado diferente, este es el procedimiento relevante para usted:

Escriba el script de shell que desea ejecutar y cópielo en el directorio correspondiente de su /etc/rc*.d/. los * corresponde al nivel de ejecución en el que desea que se ejecute el script.
Ubuntu sigue la numeración del nivel de ejecución de Debian, por lo que tiene el nivel de ejecución 0 para detener y el nivel de ejecución 6 para reiniciar.

Recuerda algo, que te brindamos la opción de añadir un criterio justo si chocaste tu problema .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *