/etc/inittab 中的命令在 SLES 11 上不起作用

/etc/inittab 中的命令在 SLES 11 上不起作用

我的任务是在启动时启动一个进程(如果它在关闭之前正在运行)。为了实现这一点,我添加了一个命令来/etc/init.d/halt.local将进程的状态保存在文件中。

在 中/etc/inittab,我添加了命令来读取文件并根据记录的状态启动进程。但这个过程还没有出现。我可以看到在关闭时正确记录了状态,并且我添加到 /etc/inittab 中的其他命令也正确执行,但不是所需的命令。

inittab 中添加的内容:

ec1:235:once:/bin/echo "Started..." > /tmp/pankaj3.txt
rly:235:once:/bin/su - user -c '[[ `head -1 /tmp/pankaj/.status` == STARTED ]] && { /opt/my_user/bin/ctrl.sh start ; }'

在终端上执行命令时,它工作正常。输出是:

SS-01:~ # /bin/su - user -c '[[ `head -1 /tmp/pankaj/.status` == STARTED ]] && { /opt/my_user/bin/ctrl.sh start ; }'
[07-10-2015] 10:33:00 ctrl.sh[18008]: Management Process started.

执行添加到 inittab 的另一行ec1:235:once:/bin/echo "Started..." > /tmp/pankaj3.txt

请帮助我找出我做错的地方。

答案1

听起来 SUSE Linux ES 11 使用传统的 System V init 系统 (sysvinit)。 苏斯文档 |初始化进程

你可以看到人初始化表(5)用于语法文档。

首先,可能inittab不支持重定向和复合命令等 shell 功能,这些功能仅在 shell 中受支持。尽管您说您的第一个命令有效,但这表明这不是原因。

其次,默认su运行/bin/sh,可能不支持[[.

第三,其中的文件/tmp通常会在启动过程中被删除,因此如果您/tmp/pankaj/.status在关机过程中创建,则在重新启动后几乎可以肯定它不存在。检查该文件是否存在。

无论如何,您应该将其设为一个单独的初始化脚本,使用您期望的 shell 作为行#!,将其放入/etc/init.d/pankaj(或其他),并使其在级别 2、3 和 5 上运行chkconfig

SUSE 管理指南的初始化脚本部分提供了一些入门技巧。

最后,如果您想要做的只是让某个服务在启动时重新启动(如果该服务之前正在运行),那么就不要这样做。 chkconfig是用于配置启动时启动的标准工具。系统上的所有其他服务都使用它。让一项服务表现不同只会让事情变得混乱。

相关内容