viernes, 19 de junio de 2020

Ejecutar un script en el inicio

Esto no es una cosa que yo (personalmente) use mucho, sin embargo, en foros,  he leido más de una vez esa pregunta, o ese consejo. Total que, por curiosidad, investigando un poco, descubro que hay muchas formas de hacer que, cuando arranques tu PC, se ejecute determinado script (que te interesa ejecutar, claro). Y, de todas ellas, veo que la más fácil es hacerlo usando 'cron' (en particular, 'crontab'). Así que voy a centrar un poco esta idea, para que quede aquí 'como apunte táctico'.

Y habrá que empezar diciendo que cron y crontab son dos herramientas que tienes a tu disposición para programar tareas. Yo, personalmente, apenas las he usado, aunque, por aquello de saber de qué va la cosa, las dediqué hace un par de años una entrada, aquí.

Al asunto: como crontab ‘no es más que el fichero de texto, donde se deben indicar esos procesos y tareas a ejecutar, y su pauta temporal prevista’ bastará crear el script, e indicar a crontab que lo ejecute.
Sencillo ¿no? Pero bueno, hay que aclarar algunas cosas.
Lo primero, comprobar que están habilitados los servicios de cron (y por tanto, el funcionamiento de crontab).
De ello se encarga, ahora, systemd, así que basta hacer
sudo systemctl status cron.service
(Esto, en Debian. Algunas distros usan ‘crond’). Lo más habitual es que te indique que el servicio está activo (enabled). Si por lo que fuera, te indicase lo contrario, se habilitaría con
sudo systemctl enable cron.service
 
Lo siguiente sería crear el script
Por ejemplo, supongamos que quieres que, al arrancar, te limpie el caché y los archivos huérfanos. El script podría ser este:
#!/bin/sh
sudo apt autoclean && sudo apt autoremove
read -rsp $'Press any key to continue...\n' -n 1 key
# echo $key

que lo puedes llamar ‘limpiar.sh’ y guardarlo, por ejemplo, en la ruta por defecto de la terminal. En mi caso, estaría en /home/doc/limpiar.sh


El siguiente paso sería crear la orden a crontab
Aquí indicaremos a crontab que lance el script ‘en cada arranque’.
Bien, cron, como muchas otras herramientas, tiene una serie de 'expresiones reservadas' para facilitar el uso de programas o lenguajes de programación. En este caso, anteponiendo el signo arroba (@) se simplifican muchas tareas comunes. Por ejemplo
@reboot: indica que se ejecute una única vez, al inicio.
@yearly (o @annually): indica que se ejecute cada año. Equivale a poner, en crontab... 0 0 1 1 *
@monthly: ejecutar una vez al mes. Equivale a... 0 0 1 * *

(etc)
Así que la orden
@reboot [ruta-del-script]
lo soluciona todo. Por seguir el ejemplo puesto sería, en mi caso…
@reboot /home/doc/limpiar.sh


Y solo queda introducir la orden en crontab
Esto es también muy sencillo, ya decía que crontab no es más que un archivo de texto que contiene las ordenes que debe ejecutar cron.
Así que lo editamos con…
sudo crontab -e
Y basta añadir, al final de ese archivo de texto, la orden indicada. Quedaría una cosa así (un comentario: la primera vez te pregunta qué editor de textos quieres utilizar, el más cómodo en 'nano'. Luego, ya no te lo pregunta más, y te lo edita directamente con nano)…
# Edit this file to introduce tasks to be run by cron. 


# Each task to run has to be defined through a single line 
# indicating with different fields when the task will be run 
# and what command to run for the task 
…. 
# For example, you can run a backup of all your user accounts 
# at 5 a.m every week with: 
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ 
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

#
@reboot /home/doc/limpiar.sh
y (usando nano) con Ctrl+X se acepta la modificación, y se guarda.

Y ya solo queda reiniciar, y comprobar que se ejecuta el script…

Y esto es todo. Es sencillísimo, me ha costado más describirlo, paso a paso, que memorizar cómo se hace. Porque, en resumen, es algo tan simple como esto:
a) escribir y guardar el script
b) sudo crontab -e
c) copiar al final del texto editado… @reboot [ruta-del-script]
d) guardar, reiniciar... y ya está.


NOTA FINAL: 
La orden, por consola
sudo crontab -l
permite saber las ordenes crontab que tienes dispuestas para ser ejecutadas (como root). Y
crontab -l
lo mismo, para tu usuario



No hay comentarios:

Publicar un comentario