Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/09/2014, à 19:18

cmathias

Script bash + cron éviter une multiplication des processus

Bonjour à tous,

Chez moi j'ai un serveur qui sauvegarde automatiquement les données de mon serveur internet, pour avoir une tache automatique j'utilise un fichier bash avec cron. Le souci c'est que si la sauvegarde n'est pas fini cron va quand même relancer la tache.

Au bout d'un moment je peut avoir des dizaines de processus de lftp en cours limitant les performances de mes serveurs.

Existe t'il un moyen simple pour éviter ce genre de désagrément ?

Merci

Hors ligne

#2 Le 29/09/2014, à 19:37

jplemoine

Re : Script bash + cron éviter une multiplication des processus

oui. il faut utiliser un fichier dans /var/run (par exemple sauve.pid)
En début de script :
on teste la présence du fichier
il existe, on sort
il n'existe pas, on le crée

En fin de script, on efface le fichier

Dans une version 2, on peut tester l'age du fichier (en cas de plantage)

Dernière modification par jplemoine (Le 29/09/2014, à 19:37)


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#3 Le 29/09/2014, à 19:40

Junkaria

Re : Script bash + cron éviter une multiplication des processus

Ce que tu peux faire c'est récupérer le pid de la sauvegarde, et agir en fonction de son état wink

Ensuite une chose à faire c'est voir le temps d’exécution des deux scripts pour optimiser la chose pour par exemple :
> ta sauvegarde se termine
> ton script se lance
> une autre instance de sauvegarde se lance avant la fin de ton script.

Après je ne sais pas comment fonctionnent tes process mais c'est un conseil de plus wink

EDIT :Désolé j'ai lu trop vite ton topic (et je mate la télé en même temps ça aide pas ^^).
En fait tu as qu'un seul script bash qui lui lance la sauvegarde c'est bien ça ?

Dernière modification par Junkaria (Le 29/09/2014, à 20:13)


Ubuntu 08.04-11.04 | Linux Mint | ArchLinux

Hors ligne

#4 Le 29/09/2014, à 19:46

jplemoine

Re : Script bash + cron éviter une multiplication des processus

La solution que j'ai proposée est, je pense, celle qui est employée par beaucoup de "logiciels".

Dernière modification par jplemoine (Le 29/09/2014, à 19:46)


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#5 Le 29/09/2014, à 19:53

cmathias

Re : Script bash + cron éviter une multiplication des processus

Merci pour vos réponses,

jplemoine ta solution me semble plus approprié, est t'il possible de m'aider à la mettre en place ? je ne suis pas un expert dans le domaine de linux...

Merci

Hors ligne

#6 Le 29/09/2014, à 20:15

jplemoine

Re : Script bash + cron éviter une multiplication des processus

Je ne suis pas très bon en bash mais en gros :
Attention : /var/run n'est accessible que par root
Donc, si tu le lances par un utilisateur "normal", il le faut mettre un répertoire accessible à tous
pid pointe sur le fichier qui sert d'indicateur

#pid="/var/run/sauve.pid"
pid="/home/xxxx/sauve.pid"

if [ -e $pid ]; then
  echo "proc en cours"
  exit
else
  # on crée le pid
  touch $pid
fi
# là tu mets ta sauvegarde
echo "on simule"
read toto
# fin simulation
rm $pid

Dernière modification par jplemoine (Le 29/09/2014, à 20:16)


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#7 Le 29/09/2014, à 21:16

cmathias

Re : Script bash + cron éviter une multiplication des processus

J'ai trouvé ce script sur internet, il ressemble beaucoup à ton idée.

#!/bin/bash
if [ -f /var/run/$0.pid ] ; then
   echo "Une autre occurence tourne" >> /var/log/$0.log
   exit 1
   
fi
touch /var/run/$0.pid
if [ $? -ne 0 ] ; then
   echo "impossible de cree le fichier /var/run/$0.pid" >> /var/log/$0.log
   exit 2
   
fi

LOG_FILE="/opt/duplication.log"
HOST="*****"
USER="*****"
PASSWORD="*****"
REP_LOCAL="*******"
REP_DISTANT="*******"

# backup de dossiers
lftp ftp://$USER:$PASSWORD@$HOST -e "set net:connection-limit 1; set net:limit-rate 512000:0; set set file:charset utf8; set ftp:charset utf8; mirror -c $REP_DISTANT $REP_LOCAL ; quit" > $LOG_FILE 2>
 
 
#fin de script :
rm -f /var/run.$0.pid
exit 0

Il à l'air de fonctionner, par contre j'ai tester de le lancer 2 fois à partir de deux consoles et j'ai pas eu de message d'erreur.

Merci

Dernière modification par cmathias (Le 29/09/2014, à 21:37)

Hors ligne

#8 Le 29/09/2014, à 21:21

pingouinux

Re : Script bash + cron éviter une multiplication des processus

Salut,
C'est parce que la variable LOG_FILE n'est pas définie. Il y a aussi une erreur sur l'avant-dernière ligne du script.

Hors ligne

#9 Le 29/09/2014, à 21:21

jplemoine

Re : Script bash + cron éviter une multiplication des processus

Mets des guillemets dans l'affectation

LOG_FILE="/opt/duplication.log"

et dans la longue ligne

 $LOG_FILE 2>

sans les accolades


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#10 Le 29/09/2014, à 21:35

cmathias

Re : Script bash + cron éviter une multiplication des processus

Oula nos messages ce sont croisé, en fait en envoyant le post j'ai compris mon erreur et j'ai édité de suite.

la il à l'air de tourner, si je le relance le script n'a pas l'air de s’exécuter mais j'ai pas le message de echo comme quoi le script est déjà en cours... ?

Hors ligne

#11 Le 29/09/2014, à 21:37

pingouinux

Re : Script bash + cron éviter une multiplication des processus

@cmathias :
Tu as modifié ton message #7 après ma réponse #8, sans le préciser. Ceux qui liront cette discussion par la suite risquent de ne pas comprendre.

@jplemoine :

  • Pour info, ces 2 commandes sont équivalentes

    LOG_FILE=/opt/duplication.log

    et

    LOG_FILE="/opt/duplication.log"

    Les " " ne sont indispensables que si la chaîne contient des espaces ou des caractères bizarres

  • De même, $LOG_FILE est équivalent à ${LOG_FILE}. Les accolades sont cependant indispensables dans cet exemple fichier=${LOG_FILE}_suffixe.log

Correction : Orthographe

Dernière modification par pingouinux (Le 29/09/2014, à 21:48)

Hors ligne

#12 Le 29/09/2014, à 21:40

cmathias

Re : Script bash + cron éviter une multiplication des processus

Oui faite je penser pas avoir une réponse aussi rapide et j'ai pas rafraîchi avant d'éditer big_smile

je vais laisser le script tourner voir si il me créer encore des multi processus.

Hors ligne

#13 Le 30/09/2014, à 19:08

cmathias

Re : Script bash + cron éviter une multiplication des processus

Bonjour à tous,

Le script ne s’exécute plus. Je le lance avec ./ et il ne fait plus rien, il à fonctionné 1 fois hier (premier lancement)

J'ai aucun message, rien, je lance ma commande rien ne se passe.

Des idées ?

merci

EDIT : Bon j'ai réussi à rétablir le script, une petite faute de frappe de ma part.

Par contre je ne peut pas le lancer plus d'une fois, je doit redémarrer le serveur pour le relancer. J'ai l'impression que le script ne fonctionne pas totalement, certainement au niveau de la gestion du PID ?

EDIT 2 : Je confirme c'est au niveau du PID que ça déconne, il ne s'efface pas. une idée d'ou peut venir le problème ?

EDIT 3 : Après relecture du script et suppression du -f de rm j'ai ce message "rm: cannot remove ‘/var/run../duplicationL.sh.pid’: No such file or directory"

du coup je pense que

rm /var/run.$0.pid

$0.pid retourne ce résultat './duplicationL.sh"

Comment virer le ./ de duplication ?

EDIT 4 : bon j'ai réglé mon soucis en mettant le lien direct dans le rm
rm -f /var/run/duplicationL.sh.pid

Par contre et par curiosité pourquoi le $0 retourne ./duplicationL.sh et non pas duplicationL.sh simplement ?

Dernière modification par cmathias (Le 30/09/2014, à 22:45)

Hors ligne

#14 Le 01/10/2014, à 17:33

cmathias

Re : Script bash + cron éviter une multiplication des processus

Je reviens vers vous à cause de mon crontab ce coup ci...

Le script fonctionne parfaitement, aucun soucis pour l’exécuter manuellement. Par contre mon cron ne lance pas le script.

Mon cron :

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
0       9,10,11,12,13,14,15,16,17,18,19,20,21,22        *       *       *       root    /opt/duplicationL.sh
0       23,0,1,2,3,4,5,6,7,8    *       *       *       root    /opt/duplication2.sh
#

Mon code :

#!/bin/sh

if [ -f /var/run/$0.pid ] ; then
   echo "Une autre occurence tourne" >> /var/log/$0.log
   exit 1

fi
touch /var/run/$0.pid
if [ $? -ne 0 ] ; then
   echo "impossible de cree le fichier /var/run/$0.pid" >> /var/log/$0.log
   exit 2

fi

LOG_FILE="/opt/duplication.log"

HOST=""
USER=""
PASSWORD=""
REP_LOCAL=""
REP_DISTANT=""

# backup de dossiers
lftp ftp://$USER:$PASSWORD@$HOST -e "set net:connection-limit 1; set net:limit-rate 512000:0; set set file:charset$

#fin de script :
rm /var/run/duplicationL.sh.pid
exit 0

J'ai fait une erreur quelques part ?

Merci

Dernière modification par cmathias (Le 01/10/2014, à 17:35)

Hors ligne

#15 Le 01/10/2014, à 19:02

Junkaria

Re : Script bash + cron éviter une multiplication des processus

ALERTE Edite vite ton code...
Tes logins sont présents !!

EDIT: ah tu l'as modifié... mais change ton mdp car perso je l'ai reçu sur le mail de notif

Dernière modification par Junkaria (Le 01/10/2014, à 19:05)


Ubuntu 08.04-11.04 | Linux Mint | ArchLinux

Hors ligne

#16 Le 01/10/2014, à 21:35

cmathias

Re : Script bash + cron éviter une multiplication des processus

J'ai changer le mot de passe quand j'ai vu mon erreur.

Sinon j'ai regardé les logs et dans syslog je trouve sa :

$ Oct  1 21:00:01 cmathias-MS-7808 CRON[24065]: (root) CMD (/opt/duplicationL.sh)

Pas d'erreur particulière..

Hors ligne