我想使用Upstart启动一个java进程。目前,在我们的OpenSuSE服务器上,我使用System init系统来实现这一点,但是在我们的Ubuntu服务器上,我更愿意使用Upstart。但我有两个问题..。
我有一个Upstart作业(一个任务)来配置服务器,比如myconfig。在启动我的java进程的工作中,我表面上拥有:
start on stopped myconfig
exec /path/to/myjavastartscript.shmyjavastartscript.sh运行'java -classpath blah‘。在System init中,启动服务运行'nohup /path/to/myjavastartscript.sh script.sh &‘。
因此,我的第一个问题是,我仍然需要使用exec命令执行nohup还是运行在后台?
运行时,MyClass启动其他Java进程。在System init中,服务停止只是查找某个用户拥有的java进程并将其杀死。我的第二个问题是如何用Upstart控制这些进程的终止?
发布于 2012-07-16 16:27:38
您不需要使用nohup,因为当Upstart运行程序时,该进程将不会与终端相关联(默认情况下)。
对于Upstart,我建议要么直接打个电话:
exec java -classpath blah MyClass..。或者确保/path/to/myjavastartscript.sh script.sh调用:
exec java -classpath blah MyClass请注意,上面的第一个exec是Upstart节,而第二个是shell关键字。如果您的shell脚本没有调用exec的shell版本,则需要小心确保正确设置Upstart expect节-参见http://upstart.ubuntu.com/cookbook/#expect。
关于停止服务,Upstart将自动终止它正在跟踪的进程(与MyClass关联的主JVM进程)和该进程的任何子进程(从技术上讲,同一进程组中的任何进程(参见http://upstart.ubuntu.com/cookbook/#stopping-a-job))。
如果没有更多的详细信息,我不确定您的start on条件是否合适--想必,您希望MyClass作业启动当且仅当已经设置了配置文件?如果是这样的话,标准的成语是让作业pre-start节在/etc/default/MyClass.conf中阅读。如果它决定该文件不存在,或者配置文件以某种方式表示服务已禁用/未正确设置,则pre-start只需调用stop来停止作业(完全)启动(参见http://upstart.ubuntu.com/cookbook/#pre-start)。这种方法的优点是,您的start on条件可以可靠地设置为任何一组条件,从而使作业开始。当满足这些条件时,Upstart将运行作业;预启动将运行,确定配置无效,只需退出即可。当管理员决定配置服务时,作业将完全开始。
请参阅http://upstart.ubuntu.com/cookbook/#determining-the-start-on-condition-ubuntu-specific和http://upstart.ubuntu.com/cookbook/#ubuntu-well-known-events-ubuntu-specific以确定start on条件。
最后,请注意,您确实应该始终指定一个stop on条件。见http://upstart.ubuntu.com/cookbook/#stop-on。
https://askubuntu.com/questions/162768
复制相似问题