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

Administration système Discussion :

Systemctl - Daily task


Sujet :

Administration système

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut Systemctl - Daily task
    Bonjour,

    Depuis quelques jours j'essaie de mettre en place un service systemd afin de réaliser une tâche journalière. En vain. Voici mon besoin:
    • Un script python doit être lancé une fois par jour si possible
    • Ce script est un web crawler, et donc nécessite une connexion internet établie
    • Mon PC ne tourne pas 24h/24h. Donc le script devrait se lancer dès qu'il en a la possibilité et pas à une heure prédéfinie

    Mes recherches sur le sujet m'indiquent qu'il faut pour cela définir deux fichiers:
    1. mon-service.timer
    2. mon-service.service

    Tous deux étant mis dans /etc/systemd/system.

    Je vous présente ci-dessous la dernière version de ces fichiers. A noter que bien entendu cela ne fonctionne pas chez moi (le script en question fonctionne bien lui, et me génère un fichier texte lorsque lancé manuellement).

    mon-service.timer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [Unit]
    Description=Runs assuvie-crawler every day
     
    [Timer]
    OnCalendar=daily
    Persistent=true
    Unit=mon-service.service
     
    [Install]
    WantedBy=timers.target
    mon-service.service
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [Unit]
    Description=Assurancevie.com Crawler
    After=network-online.target
    Requires=network-online.target
     
    [Service]
    Type=idle
    ExecStart=/home/anaconda3/bin/python /home/julien/Documents/FINANCES/Trading/assuvie_crawler.py
    StandardError=journal
     
    [Install]
    WantedBy=default.target
    A noter également que j'ai bien pensé à activer le service et à le démarrer. D'ailleurs si je tape dans une console systemctl list-units, j'obtiens:

    Nom : Screenshot from 2019-05-30 14-39-25.png
Affichages : 193
Taille : 7,8 Ko

    Il est bien chargé, il essaie de se lancer, mais il foire. Et je ne pige pas ce qui ne va pas. Et je ne vois rien dans journalctl (enfin je regarde peut être pas bien cela dit). J'ai toujours l'impression qu'il se lance dès que je sors mon PC de veille, mais avant qu'une connexion intenet s'établisse.

    Ok, si une âme charitable pouvait m'orienter sur une piste ou me conseiller quelque chose, ce serait vraiment sympa. Mes connaissances en admin system ne sont pas très développées.

    Pour finir, je tourne sur Solus, qui ne vient pas avec crontab. J'aimerais autant réussir à réaliser cela avec systemd.

    Merci d'avoir lu!

    Ju

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    Pfiou ! Lancer tout un service juste pour qu'il fasse une tâche automatiquement, c'est lourd.

    Personnellement, je mettrais 2 lignes dans le crontab :
    • Une, @reboot
    • L'autre à 4h du matin tous les jours.

    Quit à garder un fichier contenant l'horodatage de dernière exécution sous forme de nombres de secondes écoulées depuis l'Epoch.
    Ce fichier permettrait de savoir si 24h se sont écoulées depuis la dernière fois. Ou alors si on est le même jour.

    Enfin, je signale l'existence de la commande at qui programme des exécutions. Cela permet d'exécuter ton script au démarrage, comme ci-dessus, et de commander la prochaine exécution, pile 24h après.
    Si l'ordi est allumé, il le fait. Sinon, le prochain @reboot fera le job.

    Elle est pas belle la vie ?

  3. #3
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Salut,

    Merci, mais comme je l'ai indiqu, mon système, Solus, n'utilise pas crontab. Alors je pourrais peut être voir à le mettre en place, mais honnêtement ça m'a l'air un peu trop juste pour une petite tâche.

    Un autre point que je n'ai pas évoqué, c'est que mon PC est un portable et que j'ai la fâcheuse habitude de ne presque jamais l'éteindre. Il est juste en veille prolongée. En somme il me faut quelque chose de simple et de peu gourmand qui check si la tâche a été effectuée aujourd'hui, et ce quand le PC est actif et le réseau ok.

    Je suis assez étonné de ne pas trouver mon bonheur sur internet. Après tout, comment sont checkées les mises à jours?

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Solus, n'utilise pas crontab.
    Par défaut. Mais tu peux l'installer.

    Je vous présente ci-dessous la dernière version de ces fichiers. A noter que bien entendu cela ne fonctionne pas chez moi (le script en question fonctionne bien lui, et me génère un fichier texte lorsque lancé manuellement).
    Systemd n'a pas ton environnement utilisateur. Donc, le fait que ça marche quand tu es connecté en console ne compte pas.
    De plus, si ton /home est chiffré, Systemd ne peut pas écrire dessus.

    Et je ne pige pas ce qui ne va pas.
    Tu es bon pour une séance de débogage.

  5. #5
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Salut,

    Que veux-tu dire par:
    Citation Envoyé par Flodelarab Voir le message
    Systemd n'a pas ton environnement utilisateur.
    Est-ce à voir avec les variables d'environnement? Je m'assure de ne pas directement appeler la commande python monscript.py, mais de spécifier le chemin absolu pour python et le script.

    Citation Envoyé par Flodelarab Voir le message
    Tu es bon pour une séance de débogage.
    Ouais, c'est sûr. Mis à part regarder le journal, que puis-je faire pour trouver ce qui ne va pas?

    J

  6. #6
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 324
    Par défaut
    oui, en effet tout l'environnement est différent donc les variables (user: root, pas de DISPLAY ...) donc il faut que tes librairies python soient système et non user (ou alors tu installes ton timer au niveau de l'utilisateur et non du système ?)

    Pour un debug ... tu peux faire des sorties dans un fichier texte (ps: ici tu ne nous as même pas retourné les logs journald)

Discussions similaires

  1. [OL-2007] Daily task list
    Par Fredche dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 17/10/2013, 16h35
  2. [Android] Daily task voice Alarm
    Par thyristor dans le forum Mon application mobile
    Réponses: 0
    Dernier message: 05/07/2012, 09h02
  3. [Task] Lancer un programme à une date donnée ?
    Par jsl1 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 27/01/2006, 12h44
  4. Scheduled Task
    Par wiglaft dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 22/12/2005, 04h49
  5. Réponses: 4
    Dernier message: 14/01/2005, 19h41

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