新贵作业运行脚本

时间:2018-11-16 08:19:29

标签: ubuntu-14.04 upstart

Ubuntu 14.04

我有一个简单的暴发户test.conf

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

和简单的python脚本/root/test.py

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

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

我开始测试作业,确保新贵跟踪正确的PID,等待脚本终止,但是新贵不会停止跟踪不存在的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 :(得分:0)

为什么不简单地使用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认为该进程即使退出也仍然存在:shell进程拦截了当您的python程序退出时upstart通常会收到的信号,而Upstart无法知道该进程已经退出这些信号。