Форум сайта python.su
0
Пытаюсь сделать демон, но не хрена не получается. Цикл который должен быть бесконечным делает около 400,000 интераций, а если поставить в конец цикла “time.sleep(5)” таки вообще одна интерация. Не могу понять в чём дело может кто то подцкажет, вот код:
import sys, os, time def main(): f = open("daemon.log", "w") # Вот с этим циклом беда while 1: f.write('%s\n' % time.ctime(time.time())) f.flush() #time.sleep(5) if __name__ == "__main__": # do the UNIX double-fork magic, see Stevens' "Advanced # Programming in the UNIX Environment" for details (ISBN 0201563177) try: pid = os.fork() if pid > 0: # exit first parent sys.exit(0) except OSError, e: print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror) sys.exit(1) # decouple from parent environment #os.chdir("/") os.setsid() os.umask(0) # do second fork try: pid = os.fork() if pid > 0: # exit from second parent, print eventual PID before print "Daemon PID %d" % pid sys.exit(0) except OSError, e: print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror) sys.exit(1) # start the daemon main loop main()
Отредактировано alex2016 (Дек. 10, 2016 07:41:11)
Офлайн
0
Вот на этом запускал скрипт:
Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 4.7.10-0-beget-acl x86_64)
* Documentation: https://help.ubuntu.com/
New release '14.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Last login: Sat Dec 10 05:34:04 2016 from **.**.**.**
alex2016@quake2:~ [0] $ python --version
Python 2.7.3
alex2016@quake2:~ [0] $
Отредактировано alex2016 (Дек. 10, 2016 07:43:28)
Офлайн
0
В первом сообщение почему-то к первой строке кода добавился лишний отступ, просьба не обращать внимание
Офлайн
61
попробуйте убрать из цикла sys.exit()
Офлайн
0
ZerGА в цикле нет не каких sys.exit()
попробуйте убрать из цикла sys.exit()
while 1: f.write('%s\n' % time.ctime(time.time())) f.flush() #time.sleep(5)
Офлайн
0
ZerG, убрал я все sys.exit() цикл заработал но появилась зависимость от терминала, а мне это не нужно.
import sys, os, time def main(): f = open("daemon.log", "w") while 1: f.write('%s\n' % time.ctime(time.time())) f.flush() time.sleep(10) if __name__ == "__main__": # Абсолютно бессмысленная операция без sys.exit() os.fork() os.fork() # start the daemon main loop main()
Офлайн
568
Офлайн
221
alex2016
почитайте, может быть интересным Запуск Python программы открепленной от консоли
Отредактировано JOHN_16 (Дек. 10, 2016 10:11:53)
Офлайн
0
JOHN_16А можно пожалуйста мне подцказать чем отличается мой “dooble fork magic” от преведённого в ссылке? Я плохо играю в игру найди 10 отличий.
alex2016почитайте, может быть интересным Запуск Python программы открепленной от консоли
Отредактировано alex2016 (Дек. 10, 2016 10:29:56)
Офлайн
0
FishHookЯ умею гуглить, спасибо за помощь. Очень помогли)))
https://lmgtfy.com/?q=How+to+run+programs+from+a+linux+terminal+without+blocking+the+terminal%3F
Офлайн