新的 CentOS 6 附带 Upstart,取代了 init。我正在尝试将 /etc/inittab 文件转换为新的 upstart 格式。此特定服务器只有 15 个左右的 inittab 条目,但其他服务器有 >30 个。我们主要想要 inittab 和 upstart 的“respawn”部分。但是,我已经阅读了我能找到的所有 upstart 文档(几乎全部基于 Ubuntu,显然是基于旧版本的 upstart),但没有任何进展。我可以创建一个配置文件(我们称之为 /etc/init/test.conf)。该文件包含以下内容(注意,匿名)
start on runlevel [345]
stop on starting shutdown
respawn
#Comment about what it does
exec su -c "/usr/bin/ssh -2CNL 11111:127.0.0.1:11111 10.10.1.1" username
如果我发出一个,initctl reload-configuration
作业就会被识别。我可以通过调用来启动它initctl start test
,然后作业就会开始。
但是,这在重启时不起作用,只能手动操作。我尝试将启动命令修改为以下内容,但都没有成功
start on started
start on (local-filesystems and net-device-up IFACE!=lo)
start on net-device-up IFACE=eth0
以及我在不同的例子中看到的大约十几种其他方法。似乎没有一个可以启动脚本。(test.conf 与此文件夹中的所有其他文件一样,由 root 和 644 所有)
我是否忽略了一些显而易见的事情?
答案1
我发现了一个非常非常有帮助的 upstart 脚本,可以帮助人们解决将来遇到的问题。将其放入 /etc/init/
# /etc/init/debug.conf
start on ( starting JOB!=debug \
or started JOB!=debug \
or stopping JOB!=debug \
or stopped JOB!=debug )
script
exec 1>>/tmp/log.file
echo -n "$UPSTART_JOB/$UPSTART_INSTANCE ($0):$$:`date`:"
echo "Job $JOB/$INSTANCE $UPSTART_EVENTS. Environment was:"
env
echo
end script
此脚本基本上记录了所有启动或停止的作业。我发现 CentOS 6 不会“发出”有关运行级别的任何信息。(我尝试过的其他一些常见事件也是如此)。查看调试作业在 /tmp/log.file 中创建的日志文件非常有帮助。通过将我的脚本的开头从:
start on runlevel [345]
到
start on started sshd
我的所有作业似乎都正确启动了。这很麻烦,因为我找到的每个示例都使用了前一种语法。
答案2
抱歉发了这么多帖子,但我已设法通过以下方法解决了这个问题:
start on stopped rc RUNLEVEL=[345]
“stopped” 不是一个拼写错误——rc 似乎在进入运行级别时停止。
答案3
这是我在 CentOS 6、Upstart 0.6.5 上调试重生问题时所做的事情。在另一个终端中,执行
sudo initctl log-priority debug
sudo tail -F /var/log/messages