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 10/05/2021, à 15:18

Audran

Script .sh ne s'exécute pas avec crontab.

Bonjour,

Je suis sur Ubuntu 20.04.
J'ai correctement installé cron.

J'ai créé un script .sh (nommé "save_daily.sh") qui s'exécute correctement quand je le lance sans crontab, le voici :

#!/bin/sh
dar -w -A $var -c `date +%Y-%m-%d-%H-%M` -g titi
var=$(date +%Y-%m-%d-%H-%M)
export var

Voici mon cron qui ne s'exécute pas :

00 15 * * * /bin/sh /etc/cron.d/save_daily.sh

Pouvez-vous m'aider s'il vous plaît ?

Dernière modification par Audran (Le 10/05/2021, à 15:38)

Hors ligne

#2 Le 10/05/2021, à 15:34

cqfd93

Re : Script .sh ne s'exécute pas avec crontab.

Modération

Bonjour,

Pour ajouter toi-même les balises code à ton message #1 :

  • Cliquer sur le lien « Modifier » en bas à droite du message

  • Sélectionner le texte

  • Cliquer sur le <> de l'éditeur de message
    1471986854.png


cqfd93

En ligne

#3 Le 10/05/2021, à 15:36

jplemoine

Re : Script .sh ne s'exécute pas avec crontab.

Pourquoi dis-tu qu'il ne s'exécute pas ? Si c'est parce que tu attends la création d'un fichier et qu'il n'existe pas, c'est peut-être qu'il y a une erreur.
Cette dernière n'apparaitrait pas lors du lancement manuel.
Il faudrait mettre des echo et envoyer les entrées standard et erreur vers un fichier de log.


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

#4 Le 10/05/2021, à 15:45

Audran

Re : Script .sh ne s'exécute pas avec crontab.

Lorsque j'exécute mon script juste en ligne de commande avec le chemin du fichier,
mon archive .dar est correctement créée.

/etc/cron.d/save_daily.sh

Lorsque je tente d'exécuter mon script shell avec un cron en éditant crontab, mon archive.dar ne se crée pas.

Je vais suivre vos conseils et essayer de voir ce qu'il en résulte des erreurs avec des echo.

Hors ligne

#5 Le 10/05/2021, à 15:52

Sciensous

Re : Script .sh ne s'exécute pas avec crontab.

je ne connais pas dar, mais il me semble qu'il a un soucis avec la déclaration de var, je mettrais plutôt:

#!/bin/sh
var=$(date +%Y-%m-%d-%H-%M)
dar -w -A $var -c $var -g titi
var=$(date +%Y-%m-%d-%H-%M)
export var

Dernière modification par Sciensous (Le 10/05/2021, à 15:53)


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#6 Le 10/05/2021, à 16:02

Watael

Re : Script .sh ne s'exécute pas avec crontab.

et on ne met pas ses scripts sous /etc/cron.d, pour aussi les inscrire dans une crontab.
et un script doit être exécutable pour ne pas avoir à être passer en argument à un shell.
et on indique les chemins des fichiers qu'on utilise pour ne pas douter de leur emplacement.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 10/05/2021, à 16:03

jplemoine

Re : Script .sh ne s'exécute pas avec crontab.

@Sciensous : afin d'éviter que plusieurs aidants postent de manière désordonnée, je te laisse le soin de finir le dépannage avec TA logique.
@Watael : Mon but était, à partir des logs de faire de la maïeutique afin que la personne aidée puisse ensuite se dépanner. Merci pour avoir spoiler une partie. Tant qu'à spoiler, fais-le complétement.

Dernière modification par jplemoine (Le 10/05/2021, à 16:09)


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

#8 Le 10/05/2021, à 16:22

Audran

Re : Script .sh ne s'exécute pas avec crontab.

Bonjour,

Merci de vos réponses.

Tout d'abord concernant la variable et le script en lui-même, il n'y a pas de problème, quand j'exécute mon script sans crontab, j'obtiens le résultat souhaité.
Je ne trouve pas comment mettre des echo pour renvoyer les erreurs, je suis vraiment novice.
Concernant les chemins de mes fichiers, ils sont tous renseignés jusqu'à la racine.
Je vais donc enlever mon script de /etc/cron.d pour le remettre dans le dossier root, comme au début.

"et un script doit être exécutable pour ne pas avoir à être passer en argument à un shell." <-- Je ne comprends pas bien à quoi cela fait référence.

Je vais creuser.

Hors ligne

#9 Le 10/05/2021, à 17:14

Sciensous

Re : Script .sh ne s'exécute pas avec crontab.

HS:
mon post précédent n'était que pour faire remarquer que dans le script donné, var était utilisée sans être définie avant
Je me demande comment ça peut marcher en ligne de commande (sans le cron)
C'est tout tongue

Dernière modification par Sciensous (Le 10/05/2021, à 17:14)


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#10 Le 10/05/2021, à 17:18

Audran

Re : Script .sh ne s'exécute pas avec crontab.

Hello,

En fait tu as bien vu, mais cependant la variable var dans mon cas existe déjà. smile

Hors ligne

#11 Le 10/05/2021, à 17:44

Audran

Re : Script .sh ne s'exécute pas avec crontab.

J'ai essayé de créer un fichier de log save_daily.log et voici mon cron :

40 17 * * * /bin/sh /root/save_daily.sh >> /root/save_daily.log 2>&1

Mais rien ne s'affiche dans le fichier je n'y arrive pas, quelqu'un peut m'aider s'il vous plaît ?

Hors ligne

#12 Le 10/05/2021, à 18:47

Beta Pictoris

Re : Script .sh ne s'exécute pas avec crontab.

Lance une tâche cron toutes les minutes. N'oublie pas le user. Ici root :

*/1 * * * * root /root/test.sh

Et regarde dans le syslog :

tail -f /var/log/syslog | grep -i cron

Dernière modification par Beta Pictoris (Le 10/05/2021, à 18:51)

Hors ligne

#13 Le 10/05/2021, à 23:37

Watael

Re : Script .sh ne s'exécute pas avec crontab.

Beta Pictoris : le nom d'utilisateur ne doit pas être inscrit lorsqu'on édite une crontab avec la commande crontab -e

Audran a dit :

concernant la variable et le script en lui-même, il n'y a pas de problème, quand j'exécute mon script sans crontab, j'obtiens le résultat souhaité.

ce n'est pas possible, parce qu'un script est exécuté à mesure qu'il est lu. Ceci implique qu'une variable définie après son emploi n'existe pas au moment de cet emploi !

quand j'exécute mon script sans crontab

montre-nous comment tu fais ça, stp.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#14 Le 11/05/2021, à 00:13

jplemoine

Re : Script .sh ne s'exécute pas avec crontab.

Watael a écrit :

ce n'est pas possible, parce qu'un script est exécuté à mesure qu'il est lu.

J'ai un gros doute mais si tu le dis...


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

#15 Le 11/05/2021, à 01:05

Beta Pictoris

Re : Script .sh ne s'exécute pas avec crontab.

Watael a écrit :

Beta Pictoris : le nom d'utilisateur ne doit pas être inscrit lorsqu'on édite une crontab avec la commande crontab -e

Audran ne dit pas explicitement lancer un 'crontab -e'.

Peut-être qu'il utilise le crontab système /etc/crontab ou un fichier créé dans /etc/cron.d ?

Dernière modification par Beta Pictoris (Le 11/05/2021, à 01:23)

Hors ligne

#16 Le 11/05/2021, à 01:19

Watael

Re : Script .sh ne s'exécute pas avec crontab.

Audran avait copié son script sous /etc/cron.d/, alors que ce répertoire est destiné à contenir des tâches dont l'ajout requiert le redémarrage de crond, mais il semble bien avoir utilisé crontab -e...


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#17 Le 11/05/2021, à 10:30

Audran

Re : Script .sh ne s'exécute pas avec crontab.

J'utilise bien crontab -e pour éditer mon cron.

Concernant ma variable je l'ai créée avant d'exécuter mon script puis je la réaffecte à la date d'aujourd'hui à la fin du script.

J'ai lancé un cron :

*/1 * * * * root /root/script.sh

toutes les minutes avec cela dans le script shell script.sh

touch /root/txt1.txt

Mon fichier n'est même pas créé.

En regardant les logs, il y avait ça :

May 11 10:29:01 vmi528266 CRON[1491369]: (root) CMD (root /root/script.sh)
May 11 10:29:01 vmi528266 CRON[1491370]: (root) CMD (root /root/save_daily.sh)
May 11 10:29:01 vmi528266 CRON[1491367]: (CRON) info (No MTA installed, discarding output)

Dernière modification par Audran (Le 11/05/2021, à 10:35)

Hors ligne

#18 Le 11/05/2021, à 10:35

iznobe

Re : Script .sh ne s'exécute pas avec crontab.

Bonjour en meme temps vous voulez ecrire dans le repertoire root , via une crontab utilisateur ...
Pourquoi ne pas commencer par avoir un truc qui fonctionne entierement et seulement coté USER , une fois que ca fonctionne il ne restera plus qu ' a adapter les permissions partout si il y en vraiment besoin .

je vois pas l ' interet de creer un fichier journal dans le repertoire root , dans lequel on est d' ailleurs ne jamais censé ecrire !

il faudrait aussi determiné si il ya besoin de faire ca coté root ou si coté user c ' est suffisant , quelles sont les differentes actions que le script a besoin d' effectuées ?

j ' ai l ' impression que vous mettez la charue avant les boeufs et que ca part dans tous les sens .

Dernière modification par iznobe (Le 11/05/2021, à 10:41)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#19 Le 11/05/2021, à 10:42

Watael

Re : Script .sh ne s'exécute pas avec crontab.

J'ai lancé un cron :

*/1 * * * * root /root/script.sh

comme je l'ai déjà dit, quand on édite une tâche avec crontab il ne faut pas indiquer le user.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#20 Le 11/05/2021, à 10:45

iznobe

Re : Script .sh ne s'exécute pas avec crontab.

oui il y a confusion avec le crontab user et le crontab root .

pour editer une crontab la commande est donc :

crontab -e

la ligne a inserer comporte donc 5 champs et la commande, il n  ' y a qu ' a lire les commentaires du fichier lors de l' edition pour aplliquer la mise en oeuvre :

crontab a écrit :

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

#

les 5 champs pour les données de frequence :

0 5 * * 1

la commande :

tar -zcf /var/backups/home.tgz /home/

utiliser des chemins absolus et accessibles a l' utilisateur dans un premier temps , pour verifier que ca fonctionne .

Dernière modification par iznobe (Le 11/05/2021, à 10:52)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#21 Le 11/05/2021, à 11:02

Audran

Re : Script .sh ne s'exécute pas avec crontab.

Merci de vos réponses,

En fait, mon script consiste à faire de l'archivage différentiel d'un répertoire. Pour cela il faut créer une première archive dar du répertoire (qui aura le nom d'une date), je récupère le nom de cette première archive dans une variable. Cette première étape n'est pas dans mon script.

Ce que je fais dans mon script, c'est que je créé une autre archive du même répertoire en indiquant dans le script l'archive précédente (d'où la variable créée qui permet de récupérer le nom de l'ancienne archive) pour appliquer l'archivage différentiel où seuls les nouveaux fichiers du répertoire seront enregistrés.

A la fin de mon script, je réaffecte la variable à la nouvelle date, vu que chaque archive a un nom de date différent.

Hors ligne

#22 Le 11/05/2021, à 11:04

iznobe

Re : Script .sh ne s'exécute pas avec crontab.

Tu pourrais simplement inclure la date dans le nom de l' archive et ne faire qu ' un seul et unique script non ?
ou si besoin creer 2 variables , je ne vois pas vraiment l' interet de faire 2 scripts separés , ou je n' ai pas tout compris .

ca n' explique pas le besoin d' aller poser cette archive dans le dossier root ! qu ' on peut voir dans la ligne du crontab .

Dernière modification par iznobe (Le 11/05/2021, à 11:07)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#23 Le 11/05/2021, à 11:08

Watael

Re : Script .sh ne s'exécute pas avec crontab.

A la fin de mon script, je réaffecte la variable à la nouvelle date, vu que chaque archive a un nom de date différent.

mais à chaque exécution du script cette variable est réinitialisée !


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#24 Le 11/05/2021, à 11:20

Audran

Re : Script .sh ne s'exécute pas avec crontab.

Watael c'est le but justement, je le fais dans le dossier root car je suis juste sur un serveur ubuntu de test, ce n'est pas définitif.
Après si le script ne marche pas (ce qui m'étonnerait car tout ce que je veux faire marche très bien avec mon script sans crontab), ce n'est pas si grave, je cherche juste à savoir comment faire marcher mon cron, puisque le script marche sans cron.

Dernière modification par Audran (Le 11/05/2021, à 11:24)

Hors ligne

#25 Le 11/05/2021, à 11:26

iznobe

Re : Script .sh ne s'exécute pas avec crontab.

tu devrais re poster tes 2 scripts , et mettre en commentaire ce que tu penses que chaque ligne fait dans un post de la section scripts du forum et mettre un lien dans ce post .

en attendant , j' espere que pour la ligne crontab , mon explication t ' auras eclaircie les idées .
pour debuter et verifier progressivement il vaut mieux utiliser , des repertoires de ton utilisateur , ecrire des chemins absolus , et activer soit des commandes " echo " , soit une sortie dans un fichier journal , afin de verifier les differentes etapes .
un fichier journal situé dans le /home de ton utilisateur sera un bon entrainement .


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne