Ahora que las variantes de Ubuntu y Mint se han movido a systemd, encontré que mis soluciones antiguas 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 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 un 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:
#!/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 servicio de sufijo). Entonces mi primero fuesystemctl enable startup
Reinicie la computadora una vez para iniciar los servicios. El servicio de inicio se ejecutará siempre que systemd entre en el 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 de inicio 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 usando chmod +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 muestra algunas alternativas en Stack Exchange .
vim /etc/systemd/system/start_and_stop.service
y copie 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 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 la segunda respuesta de esta publicación, pero no pude ejecutarlo hasta que agregué una sección de Instalación.
Nuevamente, edite el script /etc/systemd/service/
y habilítelo usando systemctl enable your_file_name
. Cuando cambié los objetivos, usé el systemclt 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.
[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