Cron : relancer un script/une application lors d'un reboot

bash 25 août 2016

J’installe de temps en temps des solutions de “gestion de vidéothèque” sur des PC/serveurs. Et il arrive que ces machines rebootent de temps en temps. Soit en cas de coupure de courant soit du fait de l’interface chaise/clavier. Quoiqu’il en soit il est simplement incontournable de mettre en place des scripts de lancement au boot de certaines applications. Sauf qu’entre les différentes versions de Linux et les éventuelles MàJ faites par leurs propriétaires certains scripts (avec ou sans systemd etc) deviennent inefficaces.

Du coup j’utilise une parade, également beaucoup plus simple/rapide, avec cron : le @reboot en lieu et place du timer classique.

 

Voici un exemple de cron (crontab -e en root)

# 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
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# 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
0 * * * * sh /home/tv/vnstat.sh
@reboot sh /home/tv/tvautostart.sh
0 * * * * sh /home/tv/vnstat.sh

Lancement chaque heure de mon script de mise à jour des statistiques VNstat

@reboot sh /home/tv/tvautostart.sh

Lancement au reboot du script tvautostart.sh

 

Et ce script tvautostart.sh contient à son tour les commandes de lancement d’applications

#!/bin/bash

#SABnzbd
su -c "python /home/tv/sabnzbd-develop/SABnzbd.py -d -f /home/tv/.sabnzbd/sabnzbd.ini" -s /bin/sh tv

#CouchPotato
su -c "python /home/tv/CouchPotatoServer/CouchPotato.py --daemon --config_file /home/tv/.couchpotato/settings.conf" -s /bin/sh tv

#SickRage
su -c "python /opt/sickrage/SickBeard.py -d" -s /bin/sh tv

su … …  bin/sh tv : comme le script est exécuté par root (puisque lancé par le cron de l’utilisateur root) alors je lui demande d’exécuter les commandes en passant en simple USER, à savoir “tv”

python … .py : lancement d’un script python

-d / –daemon … : lancement du script python en arrière plan

-f / –config_file … : lancement avec le fichier de configuration machin.ini/conf

 

C’est pas l’astuce de l’année mais ça me rend tellement service que ce @reboot en cron gagnerait à être plus connu !

 

 

 

 

Mots clés