我的脚本没有在 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 上。
进一步阅读
- 设置 Mailcatcher。 2014年10月21日。黑客服务器。菲德洛普有限责任公司。
- 詹姆斯·亨特和克林特·拜鲁姆 (2014)。 “公用事业”。 新贵食谱。
- 乔纳森·德博因·波拉德 (2014)。并排查看运行脚本和服务单元。。常见答案。
答案2
在引导期间运行命令时,我们不一定有权访问该命令的环境。我需要使用该命令的完全限定名称。
启动时不起作用
mailcatcher --http-ip 192.168.50.10
在启动时工作
/usr/bin/mailcatcher --http-ip 192.168.50.10
我的脚本现在可以运行,但我确实计划添加服务控件,以便稍后启动和停止工作。