CentOS 6 和新贵

Bri*_*ian 18 upstart centos6

新的 CentOS 6 带有 Upstart,取代了 init。我正在尝试将 /etc/inittab 文件转换为新的 upstart 格式。这个特定的服务器只有 15 个左右的 inittab 条目,但是,其他服务器有 >30 个。我们主要想要 inittab 和 upstart 的“重生”部分。但是,我一直在阅读我能找到的所有 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
Run Code Online (Sandbox Code Playgroud)

如果我发出一个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 
Run Code Online (Sandbox Code Playgroud)

以及我在不同示例中提到的十几种其他方式。似乎没有人启动脚本。(test.conf 和这个文件夹中的所有其他文件一样,由 root 拥有,并且是 644)

我错过了一些明显的东西吗?

Bri*_*ian 32

我为将来遇到问题的人找到了一个非常非常有用的新贵脚本。把它放到 /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
Run Code Online (Sandbox Code Playgroud)

这个脚本基本上记录了所有开始或停止的作业。我发现 CentOS 6 不会“发出”任何关于运行级别的信息。(也不是我尝试过的其他一些常见事件。')。查看调试作业在 /tmp/log.file 中创建的日志文件非常有帮助。通过更改我的脚本的开头:

start on runlevel [345]
Run Code Online (Sandbox Code Playgroud)

start on started sshd
Run Code Online (Sandbox Code Playgroud)

我所有的工作似乎都可以正确启动。这在后面很痛苦,因为我发现的每个例子都使用了以前的语法。


小智 15

很抱歉进行 necroposting,但我设法通过使用以下方法解决了这个问题:

start on stopped rc RUNLEVEL=[345]
Run Code Online (Sandbox Code Playgroud)

“stopped”不是错字——rc 似乎在进入运行级别时停止。

  • 谢谢你的提示!Necroposting 很棒,当它有帮助时! (2认同)

Mar*_*ata 5

这就是我为调试重生问题所做的(CentOS 6,Upstart 0.6.5)。在不同的终端,做

sudo initctl log-priority debug 
sudo tail -F /var/log/messages
Run Code Online (Sandbox Code Playgroud)