IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Créer un nouveau cron job via un script


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut Créer un nouveau cron job via un script
    Bonjour,
    Je souhaites ajouter un cron job par script à un utilisateur qui n'a jamais eu de crontab.
    1) Si l'utilisateur n'a jamais eu de crontab, le premier crontab -e demande de choisir un éditeur.
    Est-ce que cette demande risque de poser la question lors du déroulement de mon script ? Chose que je ne souhaites pas.

    2) Donc je souhaites mettre dans le crontab :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # REBOOT
    # &> /dev/null OU >/dev/null 2>&1 permet d'éviter l'envoi automatique d'un mail de fin d’action par cron
    @reboot bash /home/toto/reboot.sh &> /dev/null
    Donc mettre dans mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    crontab <(crontab -l ; echo "# REBOOT")
    crontab <(crontab -l ; echo "# &> /dev/null OU >/dev/null 2>&1 permet d'éviter l'envoi automatique d'un mail de fin d’action par cron")
    crontab <(crontab -l ; echo "@reboot bash /home/toto/reboot.sh &> /dev/null")
    3) TESTS :
    Ca, ca ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    crontab <(crontab -l ; echo "# REBOOT")
    donne sans rien faire d'autre l'erreur :
    /dev/fd/63: Not a regular file
    Par contre, ca, ca semble marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (crontab -l ; echo "# REBOOT") 2>&1 | grep -v "no crontab" | uniq | crontab -
    (crontab -l ; echo "# &> /dev/null OU >/dev/null 2>&1 permet d'éviter l'envoi automatique d'un mail de fin d’action par cron") 2>&1 | grep -v "no crontab" | uniq | crontab -
    (crontab -l ; echo "@reboot bash /home/francis/reboot.sh &> /dev/null") 2>&1 | grep -v "no crontab" | uniq | crontab -
    Qu'en pensez-vous ?

    Comment traduire en français ce que cela fait ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (crontab -l ; echo "mon job") 2>&1 | grep -v "no crontab" | uniq | crontab -
    ********
    2>&1 : ?
    -v : "Invert the sense of matching, to select non-matching lines." ???
    grep -v "no crontab" : qu'est ce que cela veut dire, pourquoi ca marche avec ca ? je ne comprends pas la logique de cette portion ? Ce grep ne renvoie qu'un vrai ou faux ?
    uniq : ?
    crontab - ?
    ********
    D'avance merci pour votre aide éventuelle

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Bonjour

    L'utilisateur va supprimer ton travail que tu imposes dans son espace.
    Pourquoi ne pas remplir /etc/.profile si tu veux un script de connexion ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    En fait, il n'y a qu'un seul utilisateur, et c'est moi.
    D'autre part, le .profile je ne maitrise pas donc, j'y vais doucement...

    Tu as vu, j'ai fait des modifs dans mon précédent post !

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Comment traduire en français ce que cela fait ?
    "Cela fait n'importe quoi." ? Et encore, j'ai évité l'évocation d'un matériau peu valorisé.

    • Étouffer les messages d'erreurs est-il bien nécessaire ?
    • Créer un sous-processus par les parenthèses est-il nécessaire ? (Des accolades suffisent, non ? )
    • "uniq" travaille mieux sur un fichier trié. Ton crontab est-il trié ???


    Pour la signification, c'est clair. Sinon, utilise les pages "man".
    La seule chose un peu difficile est de savoir que le tiret de fin est le fichier sur l'entrée standard, donc celui transmis par la conduite (pipe).
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Donc pour ajouter proprement un cron job par script à un seul utilisateur en l'occurence moi, qui n'a jamais eu de crontab :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {crontab -l ; echo "@reboot bash /home/francis/reboot.sh &> /dev/null"} | grep -v "no crontab" | crontab -
    C'est bon ?

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Il manque un espace après l'accolade ouvrante.
    Il manque un point virgule avant l'accolade fermante.
    (Ce sont des mots-clé. Ils doivent être reconnus.)
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    @Flodelarab
    Oui, exact, cela m'a fait cherché un moment ;-)
    Merci

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    ça vaudrait peut-être la peine de faire une petite vérification qu'il existe un fichier "$USER" sous /var/spool/cron/ avant de chercher le message d'erreur...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    oui, les users sont bien présents.

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    à quoi sert le grep, alors ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Avant le rajout du job dans crontab, le user n'existe pas dans /var/spool/cron/crontab

  12. #12
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    à quoi sert le grep, alors ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Je n'en sais rien, j'ai trouvé ca sur le net.
    La seule chose que je peux dire c'est que ca marche comme cela...et pas sans...

  14. #14
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    ¿
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if test -f "/var/spool/cron/$user" # ici $user (en minuscule pour ne pas le confondre avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #808080;">$</span>USER</span>) est le nom de l'utilisateur sélectionné dans le script (pas le <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #808080;">$</span>USER</span> du shell en cours).
    then
        { crontab -u "$user" -l; echo "ajout tâche";} | crontab -u "$user" -
    else
        echo "ajout tâche" | crontab -u "$user" -
    fi
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  15. #15
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ -f "/var/spool/cron/$user" ]; echo $?
    ( $user == $USER ) me revoit toujours 1 que ce soit avec un user disposant d'un crontab ou non...

    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  16. #16
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Bonjour

    ( $user == $USER ) me revoit toujours 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ echo $user
     
    $ echo $USER
    flodelarab
    $ ( $user == $USER )
    -bash: == : commande introuvable
    $ echo $?
    127
    Ben moi, il me renvoie toujours 127.

    Pour la bonne et simple raison que la commande que tu tapes n'a aucun sens. Les parenthèses servent à faire un sous-processus, et non un test. Même si tu faisais un simple test, le "==" ne serait pas une comparaison valide. Un simple égal suffit.
    Bref, qu'est-ce que tu racontes, Hominidé ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  17. #17
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Citation Envoyé par Hominidé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ -f "/var/spool/cron/$user" ]; echo $?
    me revoit toujours 1 que ce soit avec un user disposant d'un crontab ou non...
    depuis le temps que je code, je n'ai pas appris à dire n'importe quoi.

    le répertoire existe-t-il ?
    certaines distributions rangent-elles les crontab utilisateurs ailleurs ? quelle distribution utilises-tu ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  18. #18
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ echo $user
     
    $ echo $USER
    flodelarab
    $ ( $user == $USER )
    -bash: == : commande introuvable
    $ echo $?
    127
    Ben moi, il me renvoie toujours 127.

    Pour la bonne et simple raison que la commande que tu tapes n'a aucun sens. Les parenthèses servent à faire un sous-processus, et non un test. Même si tu faisais un simple test, le "==" ne serait pas une comparaison valide. Un simple égal suffit.
    Bref, qu'est-ce que tu racontes, Hominidé ?
    . Il s'agit bien du test qui me revoit 1(False) .C'est à dire [ -f "/var/spool/cron/$user" ]; echo $?. Les parathèses ne correspondent pas à une commande... C'était juste pour dire que j'ai utilisé la variable d'environnement $USER pour mes tests.... Mais au vu de ton intervention , je m'apperçois que ce n'était pas clairement dit. Désolé.

    @N_BaH:
    Je suis sur ubuntu 18.04 (j'ai aussi fait l'essai en virtualbox avec 20.04).
    Depuis ma 18.04 avec crontab:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ~ jt'écoute :cd /var/spool/cron/
    /var/spool/cron jt'écoute :ls
    crontabs
    Le dossier crontabs appartient à root et si je l'ouvre (avec les droits root), j'y vois bien mon user avec le fichier de mon crontab.
    Ceci dit, même en utilisant le bon chemin du fichier, le retour du test donne False (depuis le compte $USER).
    Le test effectivement fonctionne depuis le compte root.
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  19. #19
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    y a-t-il eu du changement chez Ubuntu ?
    Citation Envoyé par man cron
    cron recherche, dans le répertoire /var/spool/cron/crontabs, des fichiers de crontab ayant des noms de compte existant dans /etc/passwd.
    cf. man cron

    alors que sur Arch :
    /var/spool/cron
    directory that contains user crontables created by the crontab command.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  20. #20
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Avec Debian 9, c'est déjà ce comportement.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. cPanel, créer compte FTP avec paramètres via script PHP
    Par TheStarcraftx dans le forum Langages serveur
    Réponses: 0
    Dernier message: 01/08/2018, 22h03
  2. [PR-2010] Créer un nouveau projet via infopath
    Par Tomtomtvn dans le forum Project
    Réponses: 0
    Dernier message: 21/03/2013, 08h32
  3. [DI] lancement des jobs DI via des scripts Shell
    Par Invité dans le forum Outils BI
    Réponses: 5
    Dernier message: 07/07/2011, 13h53
  4. Réponses: 3
    Dernier message: 21/02/2011, 23h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo