如何在Ubuntu Upstart上创建服务


21

我有一个Java可执行程序,可以通过java -jar abc.jar在终端中键入来运行。如何将其作为服务运行?我想像输入那样将其作为服务运行service abc start


更完整的答案在这里:unix.stackexchange.com/questions/1924/…基本上,在Ubuntu中,您可以为/etc/init.d创建一个脚本,该脚本可以启动/停止/重新启动服务。
艾德先生

Answers:


41

确保您使用的是14.04。Ubuntu 16.04(及更高版本)使用systemd,而不是Upstart。

Upstart脚本是一个脚本文件,位于/etc/init/,结尾为.conf

它需要2个部分:一个指示何时启动,另一部分指示要执行的命令。

从示例开始的最简单脚本是:

# myprogram.conf
start on filesystem
exec /usr/bin/java -jar /path_to/program

在下创建为root /etc/init/myprogram.conf

如果您的脚本需要多个命令行,请使用script部分代替该exec行:

# myprogram.conf
start on filesystem
script
    /usr/bin/java -jar /path_to/program
    echo "Another command"
end script

要为您的服务启用bash完成,请在/etc/init.d文件夹中添加符号链接:

sudo ln -s /etc/init/myprogram.conf /etc/init.d/myprogram

然后尝试启动和停止它:

sudo service myprogram start

根据新手食谱,您可以创建pre-start/ post-startpre-stop/ post-stop要执行的命令。

此外,我读到您想检查某个进程是否正在运行。检查此问题,并可能使用该pre-start部分。


1
也许您需要使用来使其可执行sudo chmod +x /etc/init.d/myprogram。注意:您回答的方法在Ubuntu 16.04中不起作用!
juliocesar

2
@juliocesar 16.04使用systemd,而不是Upstart。
Rael Gugelmin Cunha

start on不是必需的节。如您在这里所读:这项工作只能由管理员控制
2015年

@SuB是的,但是作业将不会自动启动,并且很明显,问题作者需要某种类似于服务的行为,即自动启动。
Rael Gugelmin Cunha

是的 我知道。刚刚添加评论以完成您的答案。
2015年

0

您需要创建一个新贵。 http://upstart.ubuntu.com/getting-started.html

与良好的SysV初始化脚本相比,暴发户(IMHO)是一场灾难。新贵是FAR付出更多的努力,而没有太多工作要做的上行空间。话虽如此,我怀疑那里会有一些暴发户后卫,这些人会带我去完成任务;-)


1
它只是/etc/init/yourservice.conf中的文件,其中一行指示启动时间,另一行指示exec命令。Fedora也使用暴发户。此外,甚至Debian都将其初始模式更改为SystemD,将来将是Ubuntu模式。
Rael Gugelmin Cunha 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.