我尝试启动守护进程。我尝试在启动期间运行此命令,以使用dtnd -c DTN2/dtn/dtn.conf -o DTN2/dtn/log -d
ubuntu 14.04 中的命令启动 DTN2 守护进程
我将其作为 shell 脚本放在计算机的某个位置,并将其添加到rc.local
例如中sh '/pathtoscript/script.sh'
。当我使用 时它可以工作sudo /etc/init.d/rc.local start
。但是重启后它不会启动。我如何确保它运行?使用init.d
或添加 Upstart 作业创建脚本是否是运行 ubuntu 14.04 启动时守护进程的更好方法。
答案1
现在,Ubuntu 给出了答案。
您正在使用 Ubuntu Linux。您已经拥有 upstart 或 systemd(在本例中为前者)。不要从编写 System 5rc
脚本开始。
/etc/rc.local
是一种双重向后兼容机制,因为它是一种向后兼容机制,而这种机制本身就是系统 5 中的兼容机制rc
。正如混乱所示https://askubuntu.com/a/618138/43344地址,使用/etc/rc.local
可能会出现严重错误。 不要从使用 开始rc.local
。
upstart 和版本 14
因此编写一个 upstart job 文件。
它看起来像这样:
#/etc/init/dtnd.conf # 描述“DTN2 守护进程” 在文件系统和静态网络上启动 在运行级别 [016] 停止 env DAEMON='/usr/sbin/dtnd' 重生 exec /usr/sbin/dtnd -c /etc/dtn/dtn.conf -o /var/log/dtn/log
调整您的日志和配置设置;并且以通常的方式,使用、等等,作为新贵作业initctl start
使用initctl stop
。
不要使用该-d
选项。该程序是已经通过在服务管理器下运行而被“守护”。
systemd 和版本 15
因此编写一个 systemd 服务单元。
迁移到 systemd 的第一条规则再次适用。有人已经这样做了。有关示例,请参阅dtnd.service
由一位匿名人士于 2012 年撰写。
再次:不要使用该-d
选项。该程序是已经通过在服务管理器下运行而被“守护”。
还要注意,您不需要该-o
选项。以普通方式记录到标准输出/标准错误,systemd 会将其写入日志。
以通常的方式使用 systemd 服务,使用systemctl start
、systemctl stop
、systemctl status
等。特别是,使用systemctl enable
可确保服务在系统引导时自动启动。