我的任务是在启动时启动一个进程,如果它在关闭之前正在运行。为此,我在/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的另一行将被执行。
请帮我找到我做错的地方。
发布于 2015-10-07 14:34:25
听起来,sysvinit 11使用传统的System init系统(sysvinit)。Suse _ init过程
关于语法的文档,您可以看到(5)。
首先,inittab可能不支持shell特性,例如重定向和复合命令,这些特性仅在shell中支持。尽管你说你的第一个命令有效,但这表明这不是原因。
其次,su默认运行/bin/sh,这可能不支持[[。
第三,/tmp中的文件通常在引导过程中被删除,所以如果您在关闭期间创建了/tmp/pankaj/.status,那么在重新启动之后它几乎肯定不在那里。检查文件是否存在。
在任何情况下,您都应该让它成为一个单独的init脚本,它使用您期望的shell作为#!行,将它放在/etc/init.d/pankaj (或其他什么)中,并使用chkconfig在2、3和5级别运行。
SUSE管理指南的Init脚本部分提供了一些开始使用它的技巧。
最后,如果您想要做的只是在启动时重新启动一个服务,如果它以前正在运行,那么不要这样做。chkconfig是配置在启动时启动的一些东西的标准工具。这是你系统上所有其他服务所使用的。让一项服务采取不同的行动只会使事情变得混乱。
https://unix.stackexchange.com/questions/234485
复制相似问题