现在来看看 Ubuntu 的答案。

现在来看看 Ubuntu 的答案。

我的脚本没有在 Ubuntu 下的 vagrant box 中启动时运行。

我的脚本看起来像这样 -

#!/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

我对该文件的权限如下 -

-rwxr-xr-x 1 root root 352 Apr 30 09:59 mailcatcher.sh

我运行命令 -

sudo update-rc.d "mailcatcher.sh" defaults

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

答案1

现在来看看 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 约定:
环境文件=-/etc/default/mailcatcher
类型=简单
ExecStart=/usr/bin/mailcatcher --foreground --http-ip 192.168.50.10

[安装]
WantedBy=多用户.target

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

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

暴发户

Upstart 是类似的,并且将 Fdeloper LLC 的 upstart 作业文件修改为这个问题给出了这个/etc/init/mailcatcher.conf

描述“邮件捕手”

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

重生

执行 /usr/bin/mailcatcher --foreground --http-ip=192.168.50.10

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

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

奖励 daemontools 部分

为了好玩,为了娱乐任何通过 WWW 搜索到达此内容的 daemontools 系列用户,并展示为什么不从 System 5 开始的另一个原因rc脚本开始的另一个原因,我通过运行该 systemd 服务单元nosh 工具集的 convert-systemd-units命令生成以下 daemontools-family 运行脚本:

#!/bin/nosh
#运行./mailcatcher.service生成的文件
#Ruby MailCatcher
chdir /
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/etc/rc.conf{,.local}如果本地配置(systemd 样式预设或)允许,则将服务设置为在启动时自动启动。

甚至不开始与系统 5rc文件。

看着这个模板SaltStack 用于 System 5rc脚本。即使消除了 SaltStack 参数化,仍有 59 行 shell 脚本代码,其中大部分是您必须重新发明和重写的通用样板文件。再次。塞拉达已经指出了你在哪里重新发明了它。

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

进一步阅读

答案2

在引导期间运行命令时,我们不一定有权访问该命令的环境。我需要使用该命令的完全限定名称。

启动时不起作用

mailcatcher --http-ip 192.168.50.10

在启动时工作

/usr/bin/mailcatcher --http-ip 192.168.50.10

我的脚本现在可以运行,但我确实计划添加服务控件,以便稍后启动和停止工作。

相关内容