Lancer suite de commande automatiquement dans screen

Lancer suite de commande automatiquement dans screen - Installation - Linux et OS Alternatifs

Marsh Posté le 02-09-2008 à 11:05:13    

Bonjour,
 
J'essaie d'écrire un script de backup (lancé par cron) qui prenne le contenu de mon ordinateur (à l'exception de quelques folders) et le place sur un HDD externe allumé pour l'occasion.
J'aimerais que le tout s'exécute dans un screen de manière à pouvoir consulter l'avancement des choses.  
 
Cependant, je n'arrive pas à faire en sorte que toutes mes commandes s'executent dans screen. J'ai bien vu comment lancer 1 commande, comment faire pour une suite de commandes?
 
Voilà où j'en suis pour le moment (merci de me corriger sans pitié, c'est le 1er script de plus de 5 lignes que je fais, donc j'imagine que ça doit faire mal aux yeux à plus d'un)
 

Code :
  1. #!/bin/bash
  2.  
  3. screen -S backup_esata -d -R
  4.  
  5. mount /media/esata 2> /dev/null
  6.  
  7. r=$? # Stores the return value
  8. if [ $r -eq 0 ] || [ $r -eq 32 ]; then # Either mount was successful (0) or it returned that /media/esata is already mounted
  9.        echo "--- Rsync started at "`date '+%H:%M:%S'`
  10.        rsync --progress -ac --exclude-from '/media/esata/excluded_rsync_dir.txt' / /media/esata
  11.        echo "--- And ended at "`date '+%H:%M:%S'`
  12.  
  13.        if [ $? -eq 0 ]; then
  14.                umount /media/esata && eject /dev/sdg && hdparm -Y /dev/sdg
  15.                echo "--- HDD umounted at "`date '+%H:%M:%S'`
  16.        else
  17.                echo 'Il y a eu une erreur Rsync!' | mail -s 'Erreur R Sync!' esox
  18.        fi
  19. else
  20.        echo 'Le HDD e-sata n a pas pu être monté !' | mail -s 'Erreur Backup!' esox
  21. fi


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 02-09-2008 à 11:05:13   

Reply

Marsh Posté le 02-09-2008 à 12:24:02    

Salut,
 
Je pense qu'il faut sortir la commande screen du script et l'utiliser de cette facon :

Code :
  1. screen -S backup_esata -d -R nom_du_fichier_script


 
quitte à remettre cette commande dans un autre script.
 
 :hello:


---------------
Mes Galeries|Mes Vidéos
Reply

Marsh Posté le 02-09-2008 à 15:39:47    

Salut, j'ai ai pensé mais j'aurais préféré ne pas devoir créer un fichier avec juste cette ligne dedans, qui appellerait celui plus "complexe" ..


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 02-09-2008 à 16:42:24    

esox_ch a écrit :

Salut, j'ai ai pensé mais j'aurais préféré ne pas devoir créer un fichier avec juste cette ligne dedans, qui appellerait celui plus "complexe" ..


Dans ce cas, tu fais un script qui :
- écrit dans un fichier l'exacte contenu de ton scripte actuel et qui l'enregistre dans /tmp (une simple redirection de flux avec des echo et le tour est joué)
- donne des droits d'exécution a ce fichier
- exécute ce fichier dans un screen
- supprime ce fichier à la fin de l'exécution.

 

Si tu ne veux pas faire plusieurs scriptes, je ne voie que cette solution.


Message édité par zeblods le 02-09-2008 à 16:42:39
Reply

Marsh Posté le 02-09-2008 à 17:03:08    

Alors peut être en faisant quelque chose comme ca :
 

Code :
  1. #!/bin/bash
  2.  
  3. screen -S backup_esata -d -R /bin/bash -c "mount /media/esata 2> /dev/null;\
  4. r=$?;\
  5. if [ $r -eq 0 ] || [ $r -eq 32 ]; then \
  6.        echo \"--- Rsync started at \"`date '+%H:%M:%S'`;\
  7.        rsync --progress -ac --exclude-from '/media/esata/excluded_rsync_dir.txt' / /media/esata;\
  8.        echo \"--- And ended at \"`date '+%H:%M:%S'`;\
  9.        if [ $? -eq 0 ]; then \
  10.                umount /media/esata && eject /dev/sdg && hdparm -Y /dev/sdg;\
  11.                echo \"--- HDD umounted at \"`date '+%H:%M:%S'`;\
  12.        else\
  13.                echo 'Il y a eu une erreur Rsync!' | mail -s 'Erreur R Sync!' esox;\
  14.        fi\
  15. else\
  16.        echo 'Le HDD e-sata n a pas pu être monté !' | mail -s 'Erreur Backup!' esox;\
  17. fi"


 
Mais je suis pas sûr que ca fonctionne. Avec 2 ls de suite, ca a l'air de marcher mais bon...
(J'ai peut être pas échappé tout les caractères qui doivent l'être)


Message édité par Nis+ le 02-09-2008 à 17:06:26

---------------
Mes Galeries|Mes Vidéos
Reply

Marsh Posté le 04-09-2008 à 22:35:59    

J'ai finalement opté pour une solution plus simple : Coller la ligne du screen directement dans un script init.d qui s'exécute au boot (de toutes façons c'est toujours là que ça va être utilisé).
 
Cependant j'ai un soucis : Aussitôt que le script arrive à la fin, le screen se termine (et donc je ne peux plus m'y connecter). Il y a une manière de le "laisser tourner" ? Histoire que même si je m'y connecte 2h après la fin du script je puisse voir tout le ce qui a été fait?
 
Merci


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-09-2008 à 23:28:00    

esox_ch a écrit :

J'ai finalement opté pour une solution plus simple : Coller la ligne du screen directement dans un script init.d qui s'exécute au boot (de toutes façons c'est toujours là que ça va être utilisé).
 
Cependant j'ai un soucis : Aussitôt que le script arrive à la fin, le screen se termine (et donc je ne peux plus m'y connecter). Il y a une manière de le "laisser tourner" ? Histoire que même si je m'y connecte 2h après la fin du script je puisse voir tout le ce qui a été fait?
 
Merci


Le plus simple ne serait pas de tout mettre dans un fichier de log ?

Reply

Marsh Posté le 05-09-2008 à 11:10:04    

Bêtement, j'y avais pas pensé.  
J'ai fait comme tu as dit,
 
Merci beaucoup


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed