CentOS 6 和 upstart

CentOS 6 和 upstart

新的 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

相关内容