Portál AbcLinuxu, 5. května 2025 09:17

Dotaz: Systemd.timer: pythonovy skript nejevi aktivitu

24.11.2020 12:01 zdenek2008 | skóre: 26
Systemd.timer: pythonovy skript nejevi aktivitu
Přečteno: 282×
Odpovědět | Admin
Na Debianu 10 chci pravidelne spoustet prikazy pomoci systemd.timer. Nektere se normalne provedou, napr. "mpv nejaka_nahravka.mp3", "gdmp", apod. ale je problem u vetsiny pythonovych a bash skriptu. Nektere funguji, napr. takove co oteviraji GTK3 gui, ale u vetsiny se proste nestane nic. Systemdctl ale vypise ze normalne probihaji, pokud spravne rozumim. Prijde mi to tak, ze se asi vykonaji, ale vysledek jejich cinnosti konci nekde mimo. Prikazy i skripty normalne funguji pokud je spoustim primo:
abuser@comp:~$ /usr/bin/python3 /home/abuser/rss.py >> /home/abuser/rss_vystup.txt 2> /home/abuser/rss_chyby.txt
abuser@comp:~$ systemctl --user daemon-reload
abuser@comp:~$ systemctl --user status aktuality.service
● aktuality.service - Stahuje aktualni informace z ruznych webu
   Loaded: loaded (/home/abuser/.config/systemd/user/aktuality.service; enabled; vendor preset: enab
   Active: inactive (dead) since Tue 2020-11-24 09:16:23 GMT; 2min 48s ago
 Main PID: 1766 (code=exited, status=0/SUCCESS)
abuser@comp:~$ systemctl --user start aktuality.service
abuser@comp:~$ systemctl --user status aktuality.service
● aktuality.service - Stahuje aktualni informace z ruznych webu
   Loaded: loaded (/home/abuser/.config/systemd/user/aktuality.service; enabled; vendor preset: enab
   Active: active (running) since Tue 2020-11-24 09:22:54 GMT; 3ms ago
 Main PID: 1810 ((python3))
   CGroup: /user.slice/user-1000.slice/user@1000.service/aktuality.service
           └─1810 (python3)
Toto je aktuality.service:
[Unit]
Description=Stahuje aktualni informace z ruznych webu
Wants=aktuality.timer

[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/abuser/rss.py >> /home/abuser/rss_vystup.txt 2> /home/abuser/rss_chyby.txt

[Install]
WantedBy=default.target
A toto aktuality.timer:
[Unit]
Description=Stahuje aktualni informace z ruznych webu kazdou minutu
RefuseManualStart=no        # Allow manual starts
RefuseManualStop=no         # Allow manual stops

[Timer]
# Execute job if it missed a run due to machine being off
Persistent=true
# Run 120 seconds after boot for the first time
OnBootSec=120
# Run every 1 minute thereafter
OnUnitActiveSec=60
# File describing job to execute
Unit=aktuality.service

[Install]
WantedBy=timers.target
(jsou v domovskem adresari, .config/systemd/user)

Jeste pro uplnost toto normalne funguje spustene samostatne, ale ne ze systemd:
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import feedparser
#import webbrowser
import pprint

feed = feedparser.parse("nejake URL")

pprint.pprint(feed)

# feed_title = feed['feed']['title']  # NOT VALID
feed_entries = feed.entries

for entry in feed.entries:

    article_title = entry.title
    article_link = entry.link
    article_published_at = entry.published # Unicode string
    article_published_at_parsed = entry.published_parsed # Time object
    # article_author = entry.author  DOES NOT EXIST
    content = entry.summary
    # article_tags = entry.tags  DOES NOT EXIST


    #print ("{}[{}]".format(article_title, article_link))
    #print ("Published at {}".format(article_published_at))
    # print ("Published by {}".format(article_author)) 
    #print("Content {}".format(content))
    # print("category{}".format(article_tags))

Nemeli byste nekdo nejake napady, co s tim? Kdyztak predem dekuji za pripadne tipy.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.11.2020 12:26 X
Rozbalit Rozbalit vše Re: Systemd.timer: pythonovy skript nejevi aktivitu
Odpovědět | | Sbalit | Link | Blokovat | Admin
ExecStart=/usr/bin/python3 /home/abuser/rss.py >> /home/abuser/rss_vystup.txt 2> /home/abuser/rss_chyby.txt
WorkingDirectory=/home/abuser
24.11.2020 12:50 zdenek2008 | skóre: 26
Rozbalit Rozbalit vše Re: Systemd.timer: pythonovy skript nejevi aktivitu
Diky, radek pridan, ale zatim nic:
abuser@comp:~$ systemctl --user daemon-reload
abuser@comp:~$ systemctl --user start aktuality.service
abuser@comp:~$ systemctl --user status aktuality.service
● aktuality.service - Stahuje aktualni informace z ruznych webu
   Loaded: loaded (/home/abuser/.config/systemd/user/aktuality.service; enabled; vendor preset: enab
   Active: inactive (dead) since Tue 2020-11-24 11:46:41 GMT; 3s ago
  Process: 3172 ExecStart=/usr/bin/python3 /home/abuser/rss.py >> /home/abuser/rss_vystup.txt 2> /home/q
 Main PID: 3172 (code=exited, status=0/SUCCESS)
Řešení 1× (zdenek2008 (tazatel))
24.11.2020 13:02 tttt
Rozbalit Rozbalit vše Re: Systemd.timer: pythonovy skript nejevi aktivitu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nevadí tomu to přesměrování? Zkusil bych to nejdřív bez něj a kouknul, co to píše do journalu (sudo journalctl -xf, případně ho nastavil pres systemd.
StandardOutput=append:/home/abuser/rss_vystup.txt
StandardError=file:/home/abuser/rss_chyby.txt
24.11.2020 13:29 zdenek2008 | skóre: 26
Rozbalit Rozbalit vše Re: Systemd.timer: pythonovy skript nejevi aktivitu
To bylo ono, diky za tip. Jeste jsem ted znovu zkousel variantu s/bez "WorkingDirectory", rozdil nevidim ale radeji to tam necham. Jeste budu zkouset ruzne jine skripty a uvidim jak to pujde dal. Tak jeste jednou dik.
24.11.2020 14:07 zdenek2008 | skóre: 26
Rozbalit Rozbalit vše Re: Systemd.timer: pythonovy skript nejevi aktivitu
Zkusil jsem spustit jiny skript, jeste je tam nejaky problem:
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import subprocess


subprocess.Popen(['/usr/bin/okular', './knihy/vmls.pdf'])

print('nazdar!')

subprocess.Popen(['mpv', 'time_to_sleep.mp3'])
Ten print() se normalne ukaze ve vystupnim souboru podle vyse v diskuzi uvedeneho reseni (jen jsem zmenil jmeno spousteneho skriptu v puvodnim .service souboru), ale ty subprocesy se nijak nejevi. Samostane spusteny skript dela to co ma.
Řešení 1× (zdenek2008 (tazatel))
24.11.2020 16:23 zdenek2008 | skóre: 26
Rozbalit Rozbalit vše Re: Systemd.timer: pythonovy skript nejevi aktivitu
Tak i to je uz vyresene. Do sekce [Service] jsem pridal

KillMode=process

a uz to funguje.

Zdroj:

https://raspberrypi.stackexchange.com/questions/99520/running-subprocess-in-a-service-not-working

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.