Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: SeriousSam 26 Února 2013, 08:36:33

Název: Pytnovské skripty běžící jako samostatné procesy
Přispěvatel: SeriousSam 26 Února 2013, 08:36:33
Zdravím. Na Ubuntu 12.04 LTS mi běží několik Python skriptů spouštějící se při startu počítače. Pokud je vyhledám v procesech pomocí -  ps aux | grep python -  vyjede mi pár běžících procesů spouštěně Pythnem, ale ne ty mé. Skripty jsou uloženy tradičně v  /usr/bin. Můj dotaz tedy zní.... je možné tyto skripty spouštět jako samostatně běžící procesy ??? Tím mám na mysli, že při opětovném grepnutí viz. výše mi vyjedou samostané řádky a na každém z nich jeden tento skript jako samostatný proces, kde uvidím cestu  např. jako      /usr/bin/python  /usr/bin/nazev_meho_skriptu. Jsem v Pythonu naprostý začátečník budu rád za jakoukoliv radu. Děkuji.   
Název: Re:Pytnovské skripty běžící jako samostatné procesy
Přispěvatel: GdH 26 Února 2013, 09:55:26
Pokud spouštíš ty skripty samostatně, vždy budou běžet jako samostatný proces. Rozdíl může být jen v tom, jak se ten proces bude jmenovat - pokud spustíš přímo skript (musí mít nastaven spustitelný příznak) a necháš na shellu, aby si z prvního řádku přečetl a spustil interpret pythonu, bude se tvůj pythoní proces jmenovat jako soubor, který spouštíš. Pokud skript spustíš jako python skript, bude jméno procesu python a svůj skript musíš hledat v parametrech. Pokud ale neběží vůbec, tak je někde chyba.
Název: Re:Pytnovské skripty běžící jako samostatné procesy
Přispěvatel: SeriousSam 28 Února 2013, 08:21:05
Skripty spouštím jako python skripty s cestou k nim na prvním řádku to je v pořádku. Spustitelný příznak taky mají. Jde o to, že některé se vykonají úspěšné a jiné ne, ale v těch procesech nevidím ani jeden běžící...python skript. Zeptám se ještě jinak je možné ty skripty nějak debugovat popřípadě zjistit jestli jim nechybí nějaké knihovny nebo moduly? Při startu systému se žádná chybová hláška nezobrazí vše vypadá naprosto ok v logu systému taky nic není.   
Název: Re:Pytnovské skripty běžící jako samostatné procesy
Přispěvatel: GdH 28 Února 2013, 09:59:59
Jakým způsobem je spouštíš? Jako init skript, nebo až se startem grafické session? Co vlastně mají dělat?
Můžeš zkusit dát celý skript do try/except a případnou chybu zalogovat, například pomocí loging.exception (http://docs.python.org/2/library/logging.html#logging.exception).
Název: Re:Pytnovské skripty běžící jako samostatné procesy
Přispěvatel: SeriousSam 28 Února 2013, 10:44:37
Skripty se spouštějí z /usr/bin, některé mají i bash skripty které je spouštějí v adresáři /etc/init.d. Slouží např. k načtení defaultního domovského adresáře s přizpůsobením prostředí pro uživatele, dále skript který povoluje zápis na čtečku karet zařízení  /dev/ttyS0 jehož výstup se autentizuje LDAPem. Dále skript který po startu systému zamkne obrazovku a jako spořič je použit jako bežící text, který uživatelům sděluje jak odemknout pc pomocí čtečky.
Jediné funkční skripty jsou ty s načtením domovského adresáře a přizpůsobením prostředí gnome.     
Název: Re:Pytnovské skripty běžící jako samostatné procesy
Přispěvatel: SeriousSam 28 Února 2013, 10:59:23
Tady je například skript na zamknutí obrazovky a spouštění spořiče:

#!/usr/bin/python
#
#
from KioCommon import Config
from KioCardReader import CardReader, LogInOut
import os
import os.path
import sys

PIDFILE = "/var/tmp/kio-screen.pid"
is_pid = os.path.isfile(PIDFILE)

conf = Config.conf
scr_text = conf['gnome']['screensaver_text']

pidof_xlock = os.popen("pidof xlock").read()

try:
    pidof_xlock = int(pidof_xlock)
except ValueError:
    pass

# in case, that xlock is already running
if pidof_xlock:
    sys.exit(0)
else:
    # Renew the system in case of automated logout
    if is_pid:
        logout = LogInOut.logout_user("automated")
        renew_cmd = 'echo "renew" | nc localhost 3456'
        os.system(renew_cmd)
    # If it's start of the session, let's write an pidfile
    else:
        pidfile = open(PIDFILE, 'w')
        pidfile.close()
        cmd = 'xlock -background black -mode marquee -messagefont ' + \
              '"-adobe-helvetica-bold-r-*-*-34-240-*-*-*-*-*-*" -message "' + scr_text + '"'
        os.system(cmd)


Zamknutí obrazovky je bash skriptem:

#!/bin/bash
sleep 8
/usr/bin/xautolock -time 3 -locker /usr/bin/kio-screen-locker &
sleep 3
/usr/bin/xautolock -locknow

v souboru kiosk.conf v /etc je definovaný  text
["gnome"]
screensaver_text = " bezici text... "
screensaver_text_size = "40000"























Název: Re:Pytnovské skripty běžící jako samostatné procesy
Přispěvatel: GdH 28 Února 2013, 12:32:21
Nemám teď čas to zkoumat, tak jen obecná poznámka. Problémy se skripty spouštěnými při startu, které něco chtějí po X serveru, často souvisí s tím, že jsou spuštěny moc brzy, kdy ještě X není připraven.
Název: Re:Pytnovské skripty běžící jako samostatné procesy
Přispěvatel: starenka 06 Března 2013, 21:23:28
no, co na to koukam, tak to neco dela a pak skonci, proc bys to mel videt v procesech? jestli mas pochyby, jesli se to spousti, tak to obal do bashe a touchni si v /tmp/nejakej soubor (nebo to udelej rovnou pythonem), popripade pouzij logging a nekam si vyblej, co se deje....

co se tyce procesu, musi se to poustet jakok samostatnej proces, viz primitivni ukazka:

Kód: [Vybrat]
starenka /tmp % python -c 'while True: pass'
Kód: [Vybrat]
starenka /tmp % ps aux | grep while
starenka 25284 97.1  0.1  22400  4460 pts/2    R+   21:22   0:05 python -c while True: pass
starenka 25346  0.0  0.0   7764   852 pts/5    S+   21:22   0:00 grep --color=auto while
Název: Re:Pytnovské skripty běžící jako samostatné procesy
Přispěvatel: SeriousSam 14 Března 2013, 10:37:35
Asi jsem se dříve nevyjádřil jasně za to se omlouvám...potřebuju totiž aby ty skripty běžely neustále ne jenom při startu pc tudíž ideální bude něco jako "Python Eggs server" na kterém neustále poběží tyto skripty. Skripty pro přihlášení a odhlášení uživatele musí běžet neustále jinak se uživatel nebude ani schopen přihlásit.   
Název: Re:Pytnovské skripty běžící jako samostatné procesy
Přispěvatel: starenka 14 Března 2013, 10:44:36
cili potrebujes radoby deamona? zkus kouknout tohle, chvili sem si s tim hral, vyapda to fajn https://github.com/zedshaw/python-lust
popripade si udelej nejakej jednoduchej nekonecnej cyklus a nech se o spousteni a udrzovani nazivu starat neco, co uz to ma v popisu prace - napriklad supervisor http://supervisord.org/
Název: Re:Pytnovské skripty běžící jako samostatné procesy
Přispěvatel: SeriousSam 15 Března 2013, 09:06:35
Díky podívám se na to ten Python-lust vypadá dobře jen doufám, že se mi to podaří rozchodit.   :)