我有一个 Java 可执行程序,可以java -jar abc.jar
在终端中输入来运行。我怎样才能将其作为服务运行?我想将其作为服务运行,就像输入一样service abc start
。
答案1
确保你使用的是 14.04。Ubuntu 16.04(及以上版本)使用 systemd,而不是 Upstart。
Upstart 脚本是一个位于/etc/init/
并以 结尾的脚本文件.conf
。
它需要两个部分:一个部分用于指示何时启动,另一个部分用于执行命令。
从您的示例开始的最简单的脚本是:
# 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-start
和pre-stop
/post-stop
要执行的命令。
此外,我了解到您想检查某个进程是否正在运行。检查这个问题并可能使用该pre-start
部分。
答案2
您需要创建一个新贵。 http://upstart.ubuntu.com/getting-started.html
与老好的 SysV 初始化脚本相比,Upstart(在我看来)是一场灾难。Upstart 需要付出更多努力,但增加的工作量却没有多大好处。话虽如此,我怀疑会有一些 Upstart 的捍卫者会因为我说出了显而易见的事实而责备我 ;-)