Le blog de Jérôme DESMOULINS
Depuis plus de 10 ans, j'utilise sur mes serveurs une librairie de scripts shells pour faciliter l'exploitation des machines.
J'ai décidé de publier cette librairie il y a plusieurs mois déjà, mais n'ayant pas eu le temps d'en faire la pub avant, je me suis mis un petit coup de "Boost" pour présenter le projet.
Je me sert principalement de DjeShellSteps pour réaliser mes backups (fichiers, bases de données), pour lancer des scripts de purge de fichiers dans de grosses arborescences, pour pour gérer des rotations de fichiers de log. J'utilise aussi DjeSchellSteps pour faire mes installations d'outils lorsqu'il y a pas mal de dépendances à gérer avant de passer à une étape d'installation suivante. L'utilisation de DjeShellSteps peut être assez variée.
DjeShellSteps: Qu'est-ce que c'est?
Il s'agit d'une nouvelle façon de développer et de gérer vos scripts shell, en bash.
Grâce à DjeShellSteps, on peut créer votre script shell avec des étapes. Si un problème survient lors de l'exécution du shell, DjeShellSteps offre alors des fonctionnalités de redémarrage, de gestion des logs, de kill, etc...
Il n'y a pas besoin de gérer les fichiers journaux, les fichiers pid, etc ... pour vos scripts, DjeShellSteps le fait pour vous!
Avez quel OS est-ce compatible?
Pour l'avoir testé que quasi toutes les plateformes, DjeShellSteps fonctionne sous Linux, Solaris, AIX, HP-UX. Il fonctionne également avec Windows (cygwin, Babun, MobaXterm, etc...)
Quelles sont les fonctionnalités de DjeShellSteps?
- Exécuter un script shell étape par étape. En cas de problème, le script peut être redémarré après la dernière étape réussie
- Toutes les informations écrites sur stdout sont affichées dans un fichier de log
- Seul un court résumé de l'exécution du script peut être affiché sur stdout (ou rien du tout dans le carde d'un lancement en crontab, par exemple)
- Le script peut être redémarré depuis le début ou une étape spécifique
- Le dernier log d'exécution du script peut être affiché à partir de la ligne de commande
- Lorsqu'un script est lancé, un fichier PID est créé, puis supprimé à la fin de l'exécution du script
- Le script peut être "tué" via la ligne de commande
- Vous pouvez gérer des fichiers de configuration de vos scripts sans effort
- etc...
A quoi cela peut-il bien ressembler?
Rien de tel, pour expliquer le fonctionnement de DjeShellSteps, que de montrer quelques captures d'écranAide en ligne de commande:
~/dss/bin> ./example2.sh --help
./example2.sh (powered by DjeShellSteps v1.00)
(c) Jerome DESMOULINS
Usage:
./example2.sh
Common parameters:
--fromstep X to restart from step X
--fromscratch to restart from begining (ignore previous error)
--help to display this help message
--debug to enable debug mode
--stdout to force output to stdout (logfile still exist)
--stdoutsummary to write summary informations to stdout
--status to display your script status (running or not)
--kill to kill running script
--lastlog to display last log file
DjeShellSteps donne à vos scripts Shell de nombreuses options via partir de la ligne de commande.
Obtenez le statut d'exécution de votre script
~/dss/bin> ./example2.sh --status
example2 status [STOPPED]
Sans aucun effort, il est possible de savoir si un script est en cours d'exécution ou non.
Redémarrer l'exécution d'un script depuis une étape particulière
$./example2.sh --fromstep 20
Restarting from Step 20
##############################################################################
# DjeShellSteps v1.01 #
# Begin of example2 [2016/06/22 21:24:26] #
# Script launched by jdesmoul@LFR010756 (PID: 12112 ) #
# Parameters: --fromstep #
# Parameters: 20 #
##############################################################################
____ _ _
| _ ___ ___| |_ __ _ _ __| |_
| |_) / _ __| __/ _` | '__| __|
| _ < ____ |_ (_| | | | |_
|_| ____|___/____,_|_| __|
Info: Restart file was found. Restarting shell from step 20
##############################################################################
# Step 10 [2016/06/22 21:24:27] #
# List all files on current directory #
##############################################################################
Info: RESTART MODE - This step will be ignored
##############################################################################
# Step 20 [2016/06/22 21:24:27] #
# Sleep for two seconds #
##############################################################################
Info: RESTART MODE - This step will be ReRun
##############################################################################
# Step 30 [2016/06/22 21:24:29] #
# Display kernel version #
##############################################################################
Info: RESTART MODE - This step will be ReRun
CYGWIN_NT-6.1-WOW LFR010756 1.7.35(0.287/5/3) 2015-03-04 12:07 i686 Cygwin
##############################################################################
# End of example2 [2016/06/22 21:24:30] #
# Execution time: 5 second(s) #
##############################################################################
Un problème est survenu lors de la dernière exécution de votre script Shell? Au lancement suivant, l'exécution du script reprendra là où elle s'est arrêtée
Afficher le log de la dernière exécution du script
~/dss/bin> ./example2.sh --lastlog
./example2.sh --lastlog
##############################################################################
# DjeShellSteps v1.00 #
# Begin of example2 [2017/12/18 21:51:19] #
# Script launched by jdesmoulins@www (PID: 21440 ) #
# Parameters: --latlog #
##############################################################################
##############################################################################
# Step 10 [2017/12/18 21:51:19] #
# List all files on current directory #
##############################################################################
backup_manager_restore.sh
backup_manager.sh
example1.sh
example2.sh
mysql_backup.sh
mysql_optimize.sh
nagios_check_apache_certificate.sh
nagios_check_last_backup.sh
ntp_update.sh
##############################################################################
# End of example2 [2017/12/18 21:51:19] #
# Execution time: 1 second(s) #
##############################################################################
Sympa tout ça, mais comment fait-on pour développer un script avec DjeShellSteps?
Tout simplement en utilisant quelques mots clés dans votre script:
#!/bin/bash ############################################################ # File: example1.sh # # Author: Jerome DESMOULINS - djeshellstepsATdesmoulins.fr # # Description: # # DjeShellSteps example 1: sample shell script # # with 3 steps. # ############################################################ ### Initialisation for environnement variables mandatory for DjeShellSteps ### . `dirname $0`/djeshellsteps.sh ### Beginning of Shell Script ### BeginSteps echo "Starting Shell Script..." ### Step 10 ### Step 10 "List all files on current directory" if [ $RunThisStep -eq 1 ]; then ls fi ### Step 20 ### Step 20 "Sleep for two seconds" if [ $RunThisStep -eq 1 ]; then sleep 2 fi ### Step 30 ### Step 30 "Display kernel version" if [ $RunThisStep -eq 1 ]; then uname -a fi ### End of Shell Script ### EndSteps
Comment télécharger DjeShellSteps?
En se rendant sur le site du projet
Je ne vais pas détailler ici l'installation de DjeShellSteps, mais il suffit de décompresser une archive, et de modifier le fichier de configuration de DjeShellSteps pour pouvoir commencer à l'utiliser. Tout est détaillé dans la documentation du projet.
J'espère juste maintenant qu'il pourra servir à d'autre que moi.
N'hésitez pas à laisser vos idées ou impressions sur le forum du projet.