Script en bash ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Script en bash ?

Re: Script en bash ?

par DocType » 30 sept. 2009, 10:40

Bon, ça m'énerve... Je tourne en rond avec crontab !

Code : Tout sélectionner

sudo crontab -l * * * * * root /home/mon_rep/bash/bash_mon_client.sh >> /home/mon_rep/bash/cron.log
Le fichier cron.log est bien créé toutes les minutes et est vide. Mon fichier de log bash lui n'est pas impacté, et les fichiers présents non transférés ce qui pour moi signifie que le script ne s'exécute pas. Lorsque je tape "sudo /home/mon_rep/bash/bash_mon_client.sh", mon script s'exécute correctement.
Les droits sur mon fichier sont -rwxr-xr-x

Où pourrait se situer le problème ? Note : je suis sous ubuntu x64
Je me réponds à moi même...
J'ai refais mon cron tel quel : * * * * * /home/mon_rep/bash/bash_mon_client.sh
Et là, ç fonctionne ! Une idée du problème ? J'étais parti d'un fichier créé sous mon user local exécuté via root en cron à un fichier avec tous les droits d'éxecution et un cron sans précision de l'utilisateur qui l'exécute... Je comprends plus tout là...

Re: Script en bash ?

par DocType » 30 sept. 2009, 10:34

Bon, ça m'énerve... Je tourne en rond avec crontab !

Code : Tout sélectionner

sudo crontab -l * * * * * root /home/mon_rep/bash/bash_mon_client.sh >> /home/mon_rep/bash/cron.log

Code : Tout sélectionner

#!/bin/bash echo "Lancement du BASH @ `date`" >> /home/mon_rep/bash/logs_bash_mon_client/`date +%Y%m%d` cd /home/mon_rep/external_files/mon_client/envoi_client/ if [ -e ficWCCA011* ] then echo "open 192.168.0.22 quote USER user quote PASS password" > /tmp/ftp.$$ for file in ficWCCA011* do echo "put $file" >> /tmp/ftp.$$ echo "put $file" >> /home/mon_rep/bash/logs_bash_mon_client/`date +%Y%m%d` done echo "bye" >> /tmp/ftp.$$ ftp -ivn < /tmp/ftp.$$ rm /tmp/ftp.$$ for file in ficWCCA011* do mv $file ../traite/ done else echo "Aucun fichier trouve" >> /home/mon_rep/bash/logs_bash_mon_client/`date +%Y%m%d` fi echo "Fin du BASH @ `date`" >> /home/mon_rep/bash/logs_bash_mon_client/`date +%Y%m%d` echo "" >> /home/mon_rep/bash/logs_bash_mon_client/`date +%Y%m%d`
Le fichier cron.log est bien créé toutes les minutes et est vide. Mon fichier de log bash lui n'est pas impacté, et les fichiers présents non transférés ce qui pour moi signifie que le script ne s'exécute pas. Lorsque je tape "sudo /home/mon_rep/bash/bash_mon_client.sh", mon script s'exécute correctement.
Les droits sur mon fichier sont -rwxr-xr-x

Où pourrait se situer le problème ? Note : je suis sous ubuntu x64

Re: Script en bash ?

par DocType » 25 sept. 2009, 15:48

Trouvé !

Code : Tout sélectionner

#!/bin/sh USER=myuser PASSWD=mypass filenum=$1 x=0 echo "open 159.167.95.199 user $USER $PASSWD binary cd pacsftp01" > /tmp/ftp.$$ while [ $x -lt $filenum ] do echo "put test.txt delete test.txt" >> tmp/ftp.$$ x=`expr $x + 1` done echo "quit" >> /tmp/ftp.$$ ftp -ivn < /tmp/ftp.$$ echo $x files transferred rm /tmp/ftp.$$

Re: Script en bash ?

par DocType » 25 sept. 2009, 14:35

Erreur de débutant très certainement mais je ne trouve pas comment m'en sortir sans à chaque fichier à envoyer connecter puis déconnecter :

Code : Tout sélectionner

#!/bin/bash cd /home/mon_rep/ ftp -vni 192.168.0.2 << END_SCRIPT quote USER mon_user quote PASS mon_pass for file in ma_syntaxe* do put $file done bye END_SCRIPT
la boucle est interprétée dans la commande ftp...comment sortir cela ?

Re: Script en bash ?

par Nagol » 25 sept. 2009, 12:57

rsync ou ftp, c'est kif kif, ftp est quand meme protocolairement fait pour transférer des fichiers. mais rsync est bien aussi, surtout qu'il évite le transfert des fichiers inutiles mais c'est aussi jouable comme feature avec ftp, les deux sont scriptables et la périodicité se gère avec cron. crontab -e pour éditer en tant que user qui doit exécuter le script, et apr-s la périodicité se gère de la façon suivante par exemple c'est assez simple et en meme temps assez puissant:

# Chaque jour, 5 minutes après Minuit
5 0 * * * script

Re: Script en bash ?

par stopher » 25 sept. 2009, 12:16

Tu peux tout mettre dans un script bash ..

tout ce que tu peux faire dans un terminal , tu peux le mettre dans un script bash ..

Pour le reste comment lister les fichiers ect ect ..

je te renvois vers un des nombreux sites traitants du sujet : http://www.linux-pour-lesnuls.com/shell.php

Sinon , je serais toi , ( si c'est possible ) je créerais une archive du rep que tu veux uploader avant tout ( automatisé dans ton script biensure ), ce qui simplifie l'upload , et prend moins de temps du fait de la compression .

Bon amusement :-)

Ch.

Re: Script en bash ?

par zeus » 25 sept. 2009, 12:12

et du côté de rsync ?

Re: Script en bash ?

par DocType » 25 sept. 2009, 12:08

Slt ,

Un petit script bash ou shell au choix, ce ce type :

Code : Tout sélectionner

#!/bin/bash ftp -vni x.x.x.x <<FINFTP user loginuser passworduser put "monfichieràuploader" bye FINFTP
Hop , tu le rends executable , et tu le met en tache cron à ta convenance ..
te reste plus qu'à gérer un fichier de log pour voir si tout ce passe bien .. :-)

Good luck ,

Ch.
Merci bcp ;)

Je vais rechercher ce que je peux greffer autour en fichier log, c'est déjà beaucoup moins obscur d'un coup !
Autre petite question : comment liste les fichiers dans un dossier ? Y'a t-il une référence des fonctions pouvant être ajoutée en bash ? Le but serait d'envoyer tous les fichiers d'un dossier, qu'importe leur nom, sur le ftp de destination.

Re: Script en bash ?

par stopher » 25 sept. 2009, 12:03

Slt ,

Un petit script bash ou shell au choix, ce ce type :

Code : Tout sélectionner

#!/bin/bash ftp -vni x.x.x.x <<FINFTP user loginuser passworduser put "monfichieràuploader" bye FINFTP
Hop , tu le rends executable , et tu le met en tache cron à ta convenance ..
te reste plus qu'à gérer un fichier de log pour voir si tout ce passe bien .. :-)

Good luck ,

Ch.

Re: Script en bash ?

par Berzemus » 25 sept. 2009, 11:32

On peut tout scripter en bash (ou en tout autre langage de script).

Ou plutôt, sous linux/unix, on peut tout automatiser assez facilement, puisque tout ce fait (ou presque) en texte.
On peut même scripter Gimp pour faire des conversions par exemple, à la volée. Faut y aller pour faire ça avec photoshop...

Re: Script en bash ?

par Cobaye » 25 sept. 2009, 11:04

Mon poste local est sous ubuntu...

J'ai tilté que l'on pouvait créer un script bash pour iptables, donc je me demandais si on pouvait faire pareil pour effectuer d'autres actions et l'éxécuter à intervalles réguliers.
Je laisserai les pro linux répondre :P

Re: Script en bash ?

par DocType » 25 sept. 2009, 11:02

tu peux exécuter sur ton poste (sous windows ?) un fichier bat qui comprend en fait des commandes php ou ftp régulièrement avec le planificateur de taches. Je te conseil d'ailleurs que se soit tonpsote lcoal qui fasse la connection et non l'inverse, l'adresse ftp du serveur à peut de chance de changer alors que ton poste local s'il est en dhcp lui peut changer d'adresse.
Merci pour ta réponse.

Un peu plus d'infos : Mon poste local est sous ubuntu, et c'est bien lui qui envoie les données au serveur distant (via un tunnel vpn, mais bon, ça change rien dans tout ça le vpn). Le poste local qui est sous ubuntu dispose d'une adresse ip fixe sur le réseau, le tout connecté sur internet via une ip fixe.

J'ai tilté que l'on pouvait créer un script bash pour iptables, donc je me demandais si on pouvait faire pareil pour effectuer d'autres actions et l'éxécuter à intervalles réguliers.

Re: Script en bash ?

par Cobaye » 25 sept. 2009, 10:54

tu peux exécuter sur ton poste (sous windows ?) un fichier bat qui comprend en fait des commandes php ou ftp régulièrement avec le planificateur de taches. Je te conseil d'ailleurs que se soit tonpsote lcoal qui fasse la connection et non l'inverse, l'adresse ftp du serveur à peut de chance de changer alors que ton poste local s'il est en dhcp lui peut changer d'adresse.

Script en bash ?

par DocType » 25 sept. 2009, 10:50

Bonjour à tous,

J'aurai besoin de quelques conseils svp. Je dois toutes les heures transférer un fichier via le protocole ftp de mon local (qui est aussi accessible en ftp) vers un serveur FTP distant (ou plusieurs fichiers qui sont dans le dossier, sans bien sûr connaître son nom).

Je me demandais s'il est possible de faire ça via un script bash. J'ai pas trop envie de l'écrire en php lié à un cron, donc existe t-il un autre moyen ?
Si vous avez de la doc là dessus, ce sera bienvenu !

Merci pour votre aide.