我的任务是在启动时启动一个进程(如果它在关闭之前正在运行)。为了实现这一点,我添加了一个命令来/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
是用于配置启动时启动的标准工具。系统上的所有其他服务都使用它。让一项服务表现不同只会让事情变得混乱。