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
-
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.
-
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.
-
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í.
-
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).
-
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.
-
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"
-
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.
-
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:
starenka /tmp % python -c 'while True: pass'
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
-
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.
-
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/
-
Díky podívám se na to ten Python-lust vypadá dobře jen doufám, že se mi to podaří rozchodit. :)