#1 Le 01/11/2012, à 09:39
- lagirardiere
[résolu] commande fonctionne dans un terminal pas dans cron
slt
Je n'arrive pas a lancer une commande dans cron qui fonctionne dans un terminal. je veux faire une sauvegarde de ma base MYSQL avec automysqlbackup.
voici la commande qui fonctionne dans un terminal
sudo /usr/sbin/automysqlbackup
dans cron
0 2 * * * sudo /usr/sbin/automysqlbackup
j'ai aussi testé avec un script
script dans /usr/local/bin/savemysql.sh
#!/bin/bash
sudo /usr/sbin/automysqlbackup
exit 0
là aussi dans un terminal ça fonctionne
sh /usr/local/bin/savemysql.sh
et dans cron
0 2 * * * sh /usr/local/bin/savemysql.sh
je précise que j'ai modifier mon /etc/sudoers pour que la commande sudo /usr/sbin/automysqlbackup se lance sans mdp.
Ou est l'erreur?
Merci d'avance
Dernière modification par lagirardiere (Le 02/11/2012, à 09:45)
Portable DELL Inspiron 15R ,Ubuntu 16.4 ,écran 15,6 P ,4 go ram ,CPU intel core I3 ,disque dur 600 go, ATI Mobility Radeon HD 5000 Series ,carte wifi Broadcom Corporation BCM4313 802.11b/g
Hors ligne
#2 Le 01/11/2012, à 10:02
- cracolinux
Re : [résolu] commande fonctionne dans un terminal pas dans cron
Une idée comme ça, tu as fais un script bash que tu lances avec sh.. je sais pas si dans ton cas cela peut conduire à une impasse.
Autre chose, as-tu regardé ça (je pense que oui, mais...) : doc cron (autre considérations)
Hors ligne
#3 Le 01/11/2012, à 10:28
- grigouille
Re : [résolu] commande fonctionne dans un terminal pas dans cron
Il faut modifier la crontab de root :
sudo crontab -e
et mettre ta commande sans sudo
0 2 * * * /usr/sbin/automysqlbackup
C'est dit dans la doc citée par cracolinux
Dernière modification par grigouille (Le 01/11/2012, à 10:30)
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#4 Le 01/11/2012, à 10:43
- Postmortem
Re : [résolu] commande fonctionne dans un terminal pas dans cron
Salut,
@grigouille :
Pas besoin de modifier le crontab root.
@lagirardiere :
Si tu fais un script bash (qui commence par #!/bin/bash), si tu le lances en mettant sh devant, il sera exécuté avec sh et non bash.
Mais je pense pas que ton problème vienne de ça. C'est plutôt un souci de variables d'environnement.
Ta commande fonctionne dans le terminal, c'est bien ça ?
Donc, dans le terminal, où ta commande fonctionne, tape ceci et ajoute la liste des variables au début de ton script :
env | grep -i mysql
Cela va te donner une liste de variables d'environnement liées à mysql. Il faudra les ajouter au début de ton script comme ceci :
#!/bin/bash
export mysql_socket=xxxxxxx
export mysql_turlutu=yyyyyy
sudo /usr/sbin/automysqlbackup
Puis dans ton cron :
0 2 * * * /usr/local/bin/savemysql.sh
Mais ça m'étonne que tu doives utiliser sudo pour une commande mysql. Tu devrais pouvoir ajouter ton user dans le groupe qui va bien pour passer les commandes mysql sans sudo.
Edit :
Tu peux aussi mettre ceci au début de ton script, ainsi nous aurons les éventuels messages d'erreurs dans le fichier /tmp/log_mysql.log :
#!/bin/bash
exec > /tmp/log_mysql.log 2>&1
export mysql_socket=xxxxxxx
export mysql_turlutu=yyyyyy
sudo /usr/sbin/automysqlbackup
Dernière modification par Postmortem (Le 01/11/2012, à 10:54)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#5 Le 01/11/2012, à 12:54
- lagirardiere
Re : [résolu] commande fonctionne dans un terminal pas dans cron
merci pour vos réponses
@cracolinux et grigouille
j'ai testé la commande avec cron en root mais pas mieux rien ne se passe.
@Posmortem
oui les commandes fonctionnent dans un terminal
pour la commande env | grep -i mysql
je n'ai aucun retour .
Portable DELL Inspiron 15R ,Ubuntu 16.4 ,écran 15,6 P ,4 go ram ,CPU intel core I3 ,disque dur 600 go, ATI Mobility Radeon HD 5000 Series ,carte wifi Broadcom Corporation BCM4313 802.11b/g
Hors ligne
#6 Le 01/11/2012, à 13:00
- cracolinux
Re : [résolu] commande fonctionne dans un terminal pas dans cron
alors désolé, je crois que je peux pas t'aider la dessus...
Hors ligne
#7 Le 01/11/2012, à 13:09
- Postmortem
Re : [résolu] commande fonctionne dans un terminal pas dans cron
Zut !!
Tu as essayé de lancer le script en cron avec la ligne exec > ... histoire de voir s'il y a des messages d'erreur ?
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#8 Le 01/11/2012, à 13:11
- piolet
Re : [résolu] commande fonctionne dans un terminal pas dans cron
bonjour
tu as regardé dans la log ?
/var/log/cron
lenovo T430 RAM 8Go Xubuntu 22.04 LTS
Hors ligne
#9 Le 01/11/2012, à 13:45
- lagirardiere
Re : [résolu] commande fonctionne dans un terminal pas dans cron
@postmortem
oui rien de plus
@ piolet
pas de fichier log /var/log/
Portable DELL Inspiron 15R ,Ubuntu 16.4 ,écran 15,6 P ,4 go ram ,CPU intel core I3 ,disque dur 600 go, ATI Mobility Radeon HD 5000 Series ,carte wifi Broadcom Corporation BCM4313 802.11b/g
Hors ligne
#10 Le 01/11/2012, à 13:57
- Postmortem
Re : [résolu] commande fonctionne dans un terminal pas dans cron
Ça créé le fichier /tmp/log_mysql.log au moins ?
Si non, rajoute une ligne juste sous exec dans le genre de :
echo "Lancement sauvegarde à $(date '+%H:%M')"
Comme ça, on saura au moins si quelque chose se lance.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#11 Le 01/11/2012, à 13:58
- lagirardiere
Re : [résolu] commande fonctionne dans un terminal pas dans cron
@postmortem
j'ai supprimer l'envoie de mail par cron après l’exécution d'une tache .
et maintenant la commande tail /tmp/log_mysql.log me renvoi ceci
exitq> serveur@serveur[xxx.xxx.x.x]:~$
Portable DELL Inspiron 15R ,Ubuntu 16.4 ,écran 15,6 P ,4 go ram ,CPU intel core I3 ,disque dur 600 go, ATI Mobility Radeon HD 5000 Series ,carte wifi Broadcom Corporation BCM4313 802.11b/g
Hors ligne
#12 Le 01/11/2012, à 14:09
- lagirardiere
Re : [résolu] commande fonctionne dans un terminal pas dans cron
je fais le point
lorsque je lance maintenant la commande sh /usr/local/bin/savemysql.sh avec cron j'ai en retour dans le fichier log /tmp/log_mysql.log
-bash: exec: et : non trouvé
et voici mon script savemysql.sh
#!/bin/bash
echo "Lancement sauvegarde à $(date '+%H:%M')"
exec > /tmp/log_mysql.log 2>&1
sudo /usr/sbin/automysqlbackup
exit 0
Dernière modification par lagirardiere (Le 01/11/2012, à 14:10)
Portable DELL Inspiron 15R ,Ubuntu 16.4 ,écran 15,6 P ,4 go ram ,CPU intel core I3 ,disque dur 600 go, ATI Mobility Radeon HD 5000 Series ,carte wifi Broadcom Corporation BCM4313 802.11b/g
Hors ligne
#13 Le 01/11/2012, à 14:21
- Postmortem
Re : [résolu] commande fonctionne dans un terminal pas dans cron
Il ne faut pas lancer en mettant sh devant !
Fais comme ceci :
Contenu du script /usr/local/bin/savemysql.sh :
#!/bin/bash
exec > /tmp/log_mysql.log 2>&1
echo "Lancement sauvegarde à $(date '+%H:%M:%S')"
sudo /usr/sbin/automysqlbackup
echo "Fin sauvegarde à $(date '+%H:%M:%S')"
Ensuite, on rend le script exécutable par :
chmod 755 /usr/local/bin/savemysql.sh
Puis dans ton cron :
0 2 * * * /usr/local/bin/savemysql.sh
Si tu mets sh devant ton script, il est exécuté en sh et non en bash ; et sh ne connait pas exec alors que bash, si !
Édit :
Ensuite, poste tout le contenu de /tmp/log_mysql.log
Re-edit :
Essaie en mettant ceci dans le script :
#!/bin/bash
exec > /tmp/log_mysql.log 2>&1
. $HOME/.bashrc
echo "Lancement sauvegarde à $(date '+%H:%M:%S')"
sudo /usr/sbin/automysqlbackup
echo "Fin sauvegarde à $(date '+%H:%M:%S')"
La ligne que j'ai ajouté permet d'appeler tes variables d'environnement ; il faut bien l'écrire ainsi :
.<espace>$HOME/.bashrc
Dernière modification par Postmortem (Le 01/11/2012, à 15:20)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#14 Le 02/11/2012, à 09:40
- lagirardiere
Re : [résolu] commande fonctionne dans un terminal pas dans cron
slt
Merci Postemortem pour ton aide
J'ai résolu mon probleme je me suis rendu compte que la sauvegarde s’était effectuer ce matin a 6h30 au même moment qu'une autre tache (pas indispensable d’ailleurs) programmée dans cron ,je l'ai supprimé et relancé mon script savemysql.sh et la tout roule .
Dernière modification par lagirardiere (Le 02/11/2012, à 09:43)
Portable DELL Inspiron 15R ,Ubuntu 16.4 ,écran 15,6 P ,4 go ram ,CPU intel core I3 ,disque dur 600 go, ATI Mobility Radeon HD 5000 Series ,carte wifi Broadcom Corporation BCM4313 802.11b/g
Hors ligne
#15 Le 02/11/2012, à 23:35
- Postmortem
Re : [résolu] commande fonctionne dans un terminal pas dans cron
Salut,
Petite question, par curiosité, quel est le contenu du script qui fonctionne du coup dans ton cron ??
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#16 Le 02/11/2012, à 23:49
- lagirardiere
Re : [résolu] commande fonctionne dans un terminal pas dans cron
slt
j'ai mis dans le script savemysql.sh ce que tu m'as indiqué
#!/bin/bash
exec > /tmp/log_mysql.log 2>&1
. $HOME/.bashrc
echo "Lancement sauvegarde à $(date '+%H:%M:%S')"
sudo /usr/sbin/automysqlbackup
echo "Fin sauvegarde à $(date '+%H:%M:%S')"
et merci pour ton aide
Portable DELL Inspiron 15R ,Ubuntu 16.4 ,écran 15,6 P ,4 go ram ,CPU intel core I3 ,disque dur 600 go, ATI Mobility Radeon HD 5000 Series ,carte wifi Broadcom Corporation BCM4313 802.11b/g
Hors ligne
#17 Le 03/11/2012, à 09:23
- Postmortem
Re : [résolu] commande fonctionne dans un terminal pas dans cron
Mais de rien !
Quand un script fonctionne dans le terminal et pas dans cron, c'est souvent une histoire de variables d'environnement.
Après, le truc c'est que les variables d'environnement sont pas forcément toutes initialisées par le .bashrc...
Bon week-end !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne