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

  1. #1
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    658
    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 : 658
    Points : 1 158
    Points
    1 158
    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 : 180
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 éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    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 éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    658
    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 : 658
    Points : 1 158
    Points
    1 158
    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 éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    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 éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    658
    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 : 658
    Points : 1 158
    Points
    1 158
    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 206
    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 206
    Points : 4 680
    Points
    4 680
    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)

  7. #7
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    658
    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 : 658
    Points : 1 158
    Points
    1 158
    Par défaut
    Salut.

    Tout d'abord un grand merci à vous deux de prendre le temps de lire et de répondre. ça fait toujours plaisir.

    Je vous avoue complètement patauger avec cette affaire. J'y passe que quelques minutes par jour, car c'est sur mon PC perso. Il me manque pas grand chose je suis sûr pour que cela fonctionne. Mais ce pas grand chose reflète parfaitement mon incomprehension de systemctl...

    J'ai sorti mon PC de veille aujourd'hui 18h54. Une rapide vérif avec systemctl list-units --state=failed m'apprend que mon service est toujours bien loadé, mais qu'il a foiré. J'ai sorti les logs de journalctl depuis 18h, donc tout ce qu'il s'est passé depuis la sortie de veille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    -- Logs begin at Wed 2018-10-24 14:37:59 CEST, end at Tue 2019-06-04 19:00:28 CEST. --
    Jun 04 18:54:43 julien gsd-sharing[1136]: Failed to StopUnit service: GDBus.Error:org.freedesktop.systemd1.NoSuchUnit: Unit gnome-user-share-webdav.service not loaded.
    Jun 04 18:54:43 julien gsd-sharing[1136]: Failed to StopUnit service: GDBus.Error:org.freedesktop.systemd1.NoSuchUnit: Unit rygel.service not loaded.
    Jun 04 18:54:43 julien gsd-sharing[1136]: Failed to StopUnit service: GDBus.Error:org.freedesktop.systemd1.NoSuchUnit: Unit gnome-remote-desktop.service not loaded.
    Jun 04 18:54:43 julien budgie-wm[1234]: background.vala:180: Failed to set the background '/usr/share/backgrounds/solus/SolusFresh.png': GDBus.Error:org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.DisplayManager.AccountsService”
    Jun 04 18:54:47 julien gnome-screensaver-dialog[28931]: gkr-pam: unlocked login keyring
    Jun 04 18:54:47 julien gnome-screensaver-dialog[28931]: pam_warn(gnome-screensaver:account): function=[pam_sm_acct_mgmt] flags=0 service=[gnome-screensaver] terminal=[:1.0] user=[julien] ruser=[<unknown>] rhost=[<unknown>]
    Jun 04 18:54:47 julien gsd-sharing[1136]: Failed to StopUnit service: GDBus.Error:org.freedesktop.systemd1.NoSuchUnit: Unit gnome-user-share-webdav.service not loaded.
    Jun 04 18:54:47 julien gsd-sharing[1136]: Failed to StopUnit service: GDBus.Error:org.freedesktop.systemd1.NoSuchUnit: Unit rygel.service not loaded.
    Jun 04 18:54:47 julien gsd-sharing[1136]: Failed to StopUnit service: GDBus.Error:org.freedesktop.systemd1.NoSuchUnit: Unit gnome-remote-desktop.service not loaded.
    Jun 04 18:55:03 julien dbus-daemon[1050]: [session uid=1000 pid=1050] Activating via systemd: service name='org.gnome.Terminal' unit='gnome-terminal-server.service' requested by ':1.199' (uid=1000 pid=14980 comm="/usr/bin/nautilus --gapplication-service " label="unconfined")
    Jun 04 18:55:03 julien systemd[1035]: gnome-terminal-server.service: Found left-over process 3028 (dbus-launch) in control group while starting unit. Ignoring.
    Jun 04 18:55:03 julien systemd[1035]: This usually indicates unclean termination of a previous run, or service implementation deficiencies.
    Jun 04 18:55:03 julien systemd[1035]: gnome-terminal-server.service: Found left-over process 3029 (dbus-daemon) in control group while starting unit. Ignoring.
    Jun 04 18:55:03 julien systemd[1035]: This usually indicates unclean termination of a previous run, or service implementation deficiencies.
    Jun 04 18:55:03 julien systemd[1035]: gnome-terminal-server.service: Found left-over process 3031 (xdg-desktop-por) in control group while starting unit. Ignoring.
    Jun 04 18:55:03 julien systemd[1035]: This usually indicates unclean termination of a previous run, or service implementation deficiencies.
    Jun 04 18:55:03 julien systemd[1035]: gnome-terminal-server.service: Found left-over process 3035 (gvfsd) in control group while starting unit. Ignoring.
    Jun 04 18:55:03 julien systemd[1035]: This usually indicates unclean termination of a previous run, or service implementation deficiencies.
    Jun 04 18:55:03 julien systemd[1035]: gnome-terminal-server.service: Found left-over process 3040 (gvfsd-fuse) in control group while starting unit. Ignoring.
    Jun 04 18:55:03 julien systemd[1035]: This usually indicates unclean termination of a previous run, or service implementation deficiencies.
    Jun 04 18:55:03 julien systemd[1035]: gnome-terminal-server.service: Found left-over process 3048 (xdg-document-po) in control group while starting unit. Ignoring.
    Jun 04 18:55:03 julien systemd[1035]: This usually indicates unclean termination of a previous run, or service implementation deficiencies.
    Jun 04 18:55:03 julien systemd[1035]: gnome-terminal-server.service: Found left-over process 3052 (xdg-permission-) in control group while starting unit. Ignoring.
    Jun 04 18:55:03 julien systemd[1035]: This usually indicates unclean termination of a previous run, or service implementation deficiencies.
    Jun 04 18:55:03 julien systemd[1035]: gnome-terminal-server.service: Found left-over process 3063 (xdg-desktop-por) in control group while starting unit. Ignoring.
    Jun 04 18:55:03 julien systemd[1035]: This usually indicates unclean termination of a previous run, or service implementation deficiencies.
    Jun 04 18:55:03 julien systemd[1035]: gnome-terminal-server.service: Found left-over process 3071 (dconf-service) in control group while starting unit. Ignoring.
    Jun 04 18:55:03 julien systemd[1035]: This usually indicates unclean termination of a previous run, or service implementation deficiencies.
    Jun 04 18:55:03 julien systemd[1035]: Starting GNOME Terminal Server...
    Jun 04 18:55:03 julien dbus-daemon[1050]: [session uid=1000 pid=1050] Successfully activated service 'org.gnome.Terminal'
    Jun 04 18:55:03 julien systemd[1035]: Started GNOME Terminal Server.
    Jun 04 18:55:19 julien budgie-panel.desktop[1242]: [29060:29060:0604/185519.395100:ERROR:sandbox_linux.cc(364)] InitializeSandbox() called with multiple threads in process gpu-process.
    Jun 04 18:55:21 julien budgie-panel.desktop[1242]: [29020:29020:0604/185521.072950:ERROR:CONSOLE(1)] "Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'strict-dynamic' 'sha256-EVjR8L4xuo0c7UNzAtLmKQoojKIjdHqYIqdanwmukFQ=' 'sha256-7Cb/hw63HxkRDnIh6Nlq9BCoC9GoILc14LE65ABFEiA=' 'sha256-rfz9Zof79G2YaFr+4+j2fvNjNEnOdl5YnT+9F3HvmdY=' 'sha256-LRqAyz41hhJguR0wYid5LQNIFO0F4m07PAdbEbgNh80=' 'sha256-6h/FfYkbXEq16S7SMLcO05mJkdz56y2b8HtPdLZmMhA=' 'sha256-F/uxTxmIB+TXvkVBPdiX36hMiHjGTtrHZWFzoRAgyoY=' 'sha256-uLSHMsY1aQyCTr+eZW9kUFSzhyZjSLkyzicWzaQJsVs='". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
    Jun 04 18:55:21 julien budgie-panel.desktop[1242]: ", source: chrome-search://local-ntp/local-ntp.html (1)
    Jun 04 18:55:22 julien dbus-daemon[1050]: [session uid=1000 pid=1050] Activating service name='org.gnome.ChromeGnomeShell' requested by ':1.854' (uid=1000 pid=29770 comm="/usr/bin/python /usr/bin/chrome-gnome-shell chrome" label="unconfined")
    Jun 04 18:55:22 julien dbus-daemon[1050]: [session uid=1000 pid=1050] Successfully activated service 'org.gnome.ChromeGnomeShell'
    Jun 04 18:55:29 julien budgie-panel.desktop[1242]: [29020:29020:0604/185529.702083:ERROR:CONSOLE(1)] "Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'strict-dynamic' 'sha256-EVjR8L4xuo0c7UNzAtLmKQoojKIjdHqYIqdanwmukFQ=' 'sha256-7Cb/hw63HxkRDnIh6Nlq9BCoC9GoILc14LE65ABFEiA=' 'sha256-rfz9Zof79G2YaFr+4+j2fvNjNEnOdl5YnT+9F3HvmdY=' 'sha256-LRqAyz41hhJguR0wYid5LQNIFO0F4m07PAdbEbgNh80=' 'sha256-6h/FfYkbXEq16S7SMLcO05mJkdz56y2b8HtPdLZmMhA=' 'sha256-F/uxTxmIB+TXvkVBPdiX36hMiHjGTtrHZWFzoRAgyoY=' 'sha256-uLSHMsY1aQyCTr+eZW9kUFSzhyZjSLkyzicWzaQJsVs='". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
    Jun 04 18:55:29 julien budgie-panel.desktop[1242]: ", source: chrome-search://local-ntp/local-ntp.html (1)
    Jun 04 18:55:36 julien budgie-panel.desktop[1242]: [29020:29020:0604/185536.388678:ERROR:device_event_log_impl.cc(159)] [18:55:36.388] USB: usb_service_linux.cc:234 Got duplicate add event for path: /dev/bus/usb/002/038
    Jun 04 18:56:39 julien budgie-panel.desktop[1242]: [29020:29020:0604/185639.768886:ERROR:CONSOLE(1)] "Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'strict-dynamic' 'sha256-EVjR8L4xuo0c7UNzAtLmKQoojKIjdHqYIqdanwmukFQ=' 'sha256-7Cb/hw63HxkRDnIh6Nlq9BCoC9GoILc14LE65ABFEiA=' 'sha256-rfz9Zof79G2YaFr+4+j2fvNjNEnOdl5YnT+9F3HvmdY=' 'sha256-LRqAyz41hhJguR0wYid5LQNIFO0F4m07PAdbEbgNh80=' 'sha256-6h/FfYkbXEq16S7SMLcO05mJkdz56y2b8HtPdLZmMhA=' 'sha256-F/uxTxmIB+TXvkVBPdiX36hMiHjGTtrHZWFzoRAgyoY=' 'sha256-uLSHMsY1aQyCTr+eZW9kUFSzhyZjSLkyzicWzaQJsVs='". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
    Jun 04 18:56:39 julien budgie-panel.desktop[1242]: ", source: chrome-search://local-ntp/local-ntp.html (1)
    Jun 04 19:00:28 julien budgie-panel.desktop[1242]: [29020:29020:0604/190028.430137:ERROR:CONSOLE(1)] "Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'strict-dynamic' 'sha256-EVjR8L4xuo0c7UNzAtLmKQoojKIjdHqYIqdanwmukFQ=' 'sha256-7Cb/hw63HxkRDnIh6Nlq9BCoC9GoILc14LE65ABFEiA=' 'sha256-rfz9Zof79G2YaFr+4+j2fvNjNEnOdl5YnT+9F3HvmdY=' 'sha256-LRqAyz41hhJguR0wYid5LQNIFO0F4m07PAdbEbgNh80=' 'sha256-6h/FfYkbXEq16S7SMLcO05mJkdz56y2b8HtPdLZmMhA=' 'sha256-F/uxTxmIB+TXvkVBPdiX36hMiHjGTtrHZWFzoRAgyoY=' 'sha256-uLSHMsY1aQyCTr+eZW9kUFSzhyZjSLkyzicWzaQJsVs='". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
    Jun 04 19:00:28 julien budgie-panel.desktop[1242]: ", source: chrome-search://local-ntp/local-ntp.html (1)
    Je ne vois rien en lien avec mon service. Or, je demande bien StandardError=journal.

    J

  8. #8
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 206
    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 206
    Points : 4 680
    Points
    4 680
    Par défaut
    oui tu "patauges" car c'est a toi de lancer le service pour voir l'erreur !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo systemctl start assuvie.service
    avec systemctl status assuvie.service tu as plus d'infos
    et pour les logs c'est journalctl -b0 -p3

    Mais, si ton script ne gère pas les erreurs , tu ne vas rien avoir de bien concret : c'est à ton script python de gérer les erreurs et de bien les retourner (dans fichier log par exemple)...

    ---
    et une fois que assuvie.service fonctionne bien, tu passes à assuvie.timer

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