我正在开发一个服务器守护进程。我已经运行了这个服务器的一个功能版本,但现在我编译了一个新版本。如何用新进程替换当前进程?
我可以直接使用 吗service [daemon-name] restart
?这会停止当前进程并从同一个(现已更新)可执行文件启动一个新进程吗?还是只是重新启动同一个(现已过时)二进制文件?
我可以直接启动新版本并期望它替换旧版本吗?或者它们会并行运行(这不是我的意图)?
此外(尽管这可能是一个完全不同的问题),即使我不是管理员,我也能够在我的帐户上将当前服务器作为守护进程启动。我尝试过停止它,但需要输入密码root
。有没有办法在不涉及网络管理员的情况下做到这一点?
答案1
该service
命令是用于运行 /etc/init.d 中的脚本的包装器。如果您编写了守护进程并想要使用服务命令,则需要创建一个接受启动、停止和重新启动参数的脚本来管理守护进程,然后将其放在 /etc/init.d 中。其启动、停止和重新启动功能将在该脚本中定义。
但是,根据您的问题,您似乎没有该机器的 root 访问权限。在这种情况下,您不会使用该service
命令。相反,您可以编写自己的包装器来执行此操作,或者直接从命令行运行它。
要回答您关于如何运行新版本的问题,您首先需要停止正在运行的版本。只要它在您的帐户下运行,您就可以终止它而无需 root 访问权限。按名称终止正在运行的进程的最简单方法是使用以下命令pkill
:
pkill -x mydaemon
一旦关闭,只需正常重新启动守护进程即可。如果您想将其放入脚本中,可以将其放在 ~/bin 目录中,或您通常用于存储脚本和二进制文件的任何其他位置。您的脚本可能很简单:
#!/bin/bash
pidof mydaemon >/dev/null && pkill -x mydaemon
/home/wasabi/bin/mydaemon