| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Keskustelut - Python / Ruby / Perl - Daemonin debuggausta [python, linux]editoitu: 22:07 6.1.08 Melmac 21:59 6.1.08 Tein pythonilla ohjelman joka toimii taustalla daemonina Linux-ympäristössä. Siinä on kuitenkin joitain ongelmia ja se kaatuu joskus enkä tiedä miksi. Miten saisin virheviestit näkyviin daemonista jotka python tulkki tulostaa normaalisti, kun ohjelma suoritetaan komentorivilta ja jokin poikkeus sattuu? Olen toki tehnyt ohjelmaan verbose-ominaisuuden jossa ohjelma ei katoa taustalle, mutta haluaisin nähdä mitä virheitä juuri daemon tilassa tulee. coaster 23:18 6.1.08 Voisko siihen tehdä jonkin loki tiedoston? ask 23:47 6.1.08 Jos teit ohjelmastasi daemonin oikein, eli suunnilleen näin: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/278731 niin voit vaihtaa /dev/nullin tilalle vaikka /var/log/mydaemon.login. Voit sitten tutkailla daemonisi tulosteita (mm. printillä, sys.stdout.write:llä ja sys.stderr.writellä kirjoitetut kamat) ko. lokitiedostosta. editoitu: 15:55 12.1.08 Melmac 15:54 12.1.08 Jees, kiitoksia. Ennen pääohjelman ajamista sain kaapattua virheilmoitukset haluamaani tiedostoon näin: Python # Close all open file descriptors. This prevents the child from keeping # open any file descriptors inherited from the parent. try: maxfd = os.sysconf("SC_OPEN_MAX") except (AttributeError, ValueError): maxfd = MAXFD # Iterate through and close all file descriptors. for fd in range(0, maxfd): try: os.close(fd) except OSError: # ERROR, fd wasn't open to begin with (ignored) pass os.open("/var/log/daemon_debug.log", os.O_RDWR) # standard input (0) os.dup2(0, 1) # standard output (1) os.dup2(0, 2) # standard error (2) Ztane 08:25 16.1.08 täh, ei tosiaankaan stdiniä avata mihinkään debug logiin... jos ohjelma kusee niin sehän lukee ilosesti komentoja sun logista ;) editoitu: 00:53 18.1.08 Melmac 00:50 18.1.08 Mikä ihmeen "sun logi" ja mikä lukee? Ärsyttäviä tälläiset kommentit jossa sanotaan "ei näin" sen kummemmin perustelematta ja/tai kertomatta parempaa tapaa. Akheron 17:46 18.1.08 Ongelmana oli varmaan tämä: Python os.open("/var/log/daemon_debug.log", os.O_RDWR) # standard input (0) os.dup2(0, 1) # standard output (1) os.dup2(0, 2) # standard error (2) Tuo koodi avaa tiedoston daemon_debug.log stdandard inputiksi kuten näkyy. Parempi olisi näin: Python os.open("/dev/null", os.O_RDWR) # standard input (0) os.open("/var/log/daemon_debug.log", os.O_RDWR) # standard output (1) os.dup2(1, 2) # standard error (2) Tuo koodi avaa siis tiedoston josta ei voi lukea mitään (/dev/null) standard inputiksi ja daemon_debug.login standard outputiksi ja standard erroriksi. moshe 16:48 27.1.08 Pythonissa on myös moduuli nimeltä logging. Siitä voisi ehkä olla apua? http://docs.python.org/lib/module-logging.html |
![]() Haku
|