Upstart скрипт запуска задания - PullRequest
0 голосов
/ 16 ноября 2018

Ubuntu 14.04

У меня есть простое задание upstart test.conf:

root@ubuntutest:~# cat /etc/init/test.conf 
expect fork
script
/root/test.py
end script

и простой скрипт на питоне /root/test.py:

root@ubuntutest:~# cat /root/test.py 
#!/usr/bin/python
import time

print("Hello, World")
time.sleep(30)
print("Goodbye")

Я запускаю тестовое заданиеубедитесь, что upstart отслеживает правильный PID, дождитесь завершения сценария, но затем upstart не остановит отслеживание несуществующего PID.Таким образом, выскочка всегда показывает, что задание выполняется (хотя на самом деле это не так)

root@ubuntutest:~# initctl status test
test stop/waiting
root@ubuntutest:~# initctl start test
test start/running, process 1859
root@ubuntutest:~# ps aux | grep 1859
root      1859  0.2  0.7  29832  7188 ?        S    14:43   0:00 /usr/bin/python /root/test.py
root      1862  0.0  0.2  11760  2156 pts/0    S+   14:43   0:00 grep --color=auto 1859
root@ubuntutest:~# ps aux | grep 1859
root      1864  0.0  0.2  11760  2224 pts/0    S+   14:43   0:00 grep --color=auto 1859
root@ubuntutest:~# initctl status test
test start/running, process 1859

Если я удаляю expect fork из тестового задания, то все работает хорошо (кроме следов выскочка sh вместо python) - я хочу понять, что не так с моим кодом?

То же самое происходит, если я использую скрипт bash вместо python:

#!/bin/bash

sleep 30

1 Ответ

0 голосов
/ 24 ноября 2018

Почему бы просто не использовать раздел exec вместо script [...] end script?

description "my python script"
start on startup
task
exec python

В качестве альтернативы вы можете запустить программу python из секции скрипта:

description "my python script, with extra steps"
start on started dbus
task
script
    echo foo >/tmp/bar
    exec python myscript.py
end script

Каккраткий ответ о том, почему upstart считает, что процесс все еще жив, несмотря на то, что он завершился: процесс оболочки перехватывает сигналы, которые upstart обычно получает при выходе из вашей программы на python, и Upstart не может знать, что процесс завершился без этих сигналов.

...