init.d 脚本未在启动时运行

ILi*_*les 4 ubuntu init-script shell-script init.d

我的脚本未在 Ubuntu 下的 vagrant 框中启动时运行。

我的脚本看起来像这样 -

#!/bin/bash
# /etc/init.d/mailcatcher
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
mailcatcher --http-ip 192.168.50.10
Run Code Online (Sandbox Code Playgroud)

我对文件的权限如下所示 -

-rwxr-xr-x 1 root root 352 Apr 30 09:59 mailcatcher.sh
Run Code Online (Sandbox Code Playgroud)

我运行命令 -

sudo update-rc.d "mailcatcher.sh" defaults
Run Code Online (Sandbox Code Playgroud)

如果我手动运行脚本,它会工作并启动 mailcatcher。如果我重新启动计算机,mailcatcher 守护程序不会启动。我错过了什么吗?

Jde*_*eBP 9

现在是 Ubuntu 的答案。

这是一个 Ubuntu Linux 问题,现在发布了 15 版。Ubuntu 世界现在已经有了 systemd。但即使在第 15 版之前,Ubuntu 世界也有新贵。真的没有理由编写 System 5rc脚本;从那里开始当然没有充分的理由。

upstart 和 systemd 都做所有的“服务控制”。您需要做的就是描述服务

系统

要放置在 中的 systemd 服务单元 /etc/systemd/system/mailcatcher.service

[单元]
描述=Ruby MailCatcher
文档=http://mailcatcher.me/

[服务]
# Ubuntu/Debian 约定:
EnvironmentFile=-/etc/default/mailcatcher
类型=简单
ExecStart=/usr/bin/mailcatcher --foreground --http-ip 192.168.50.10

[安装]
WantedBy=multi-user.target

这会自动获取所有 systemd 控件之一,例如:

  • systemctl enable mailcatcher.service 将服务设置为在启动时自动启动。
  • systemctl preset mailcatcher.service 如果本地策略允许,将服务设置为在启动时自动启动。
  • systemctl start mailcatcher.service 手动启动服务。
  • systemctl status mailcatcher.service 查看服务状态。

暴发户

Upstart 是类似的,修改 Fideloper LLC 的 upstart 工作文件到这个问题给出了这个/etc/init/mailcatcher.conf

描述“邮件捕手”

从运行级别开始 [2345]
在运行级别停止 [!2345]

重生

exec /usr/bin/mailcatcher --foreground --http-ip=192.168.50.10

这会自动获得所有新贵控件之一,例如:

  • initctl start mailcatcher 手动启动服务。
  • initctl status mailcatcher 查看服务状态。

奖励 daemontools 部分

为了好玩,为了让任何通过 WWW 搜索找到这个的 daemontools-family-using 人娱乐,并展示另一个不从 System 5rc脚本开始的原因,我通过nosh 工具集的 convert-systemd-units命令运行该 systemd 服务单元来生成以下 daemontools-family 运行脚本:

#!/bin/nosh
#运行从./mailcatcher.service生成的文件
#Ruby MailCatcher
目录 /
read-conf --oknofile /etc/default/mailcatcher
/usr/bin/mailcatcher --foreground --http-ip 192.168.50.10

实际上,该convert-systemd-units命令会生成一个完整的 nosh服务包目录。使用指定依赖项和排序信息的目录,安装/var/sv/mailcatcher在具有 nosh 的系统中,service-manager可以获得所有 nosh 控件,例如:

  • system-control enable mailcatcher.service 将服务设置为在启动时自动启动。
  • system-control start mailcatcher.service 手动启动服务。
  • system-control status mailcatcher.service 查看服务状态。
  • system-control preset mailcatcher.service如果本地配置(systemd 样式的预设或/etc/rc.conf{,.local})允许,将服务设置为在启动时自动启动。

甚至不要System 5rc文件开始

查看SaltStack 用于 System 5脚本的这个模板rc。即使消除了 SaltStack 参数化,也就是 59 行 shell 脚本代码,其中大部分是您必须重新发明和重写的通用样板。再次。Celada 已经指出你重新发明它的地方很糟糕。

systemd 单元文件有 11 行长。新贵的作业文件是 8 行。noshrun脚本是 6。它们为您完成所有启动/停止/状态机制。不要从 System V 开始rc,尤其是在 Ubuntu Linux 上。

进一步阅读