首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令in /etc/inittab不工作在SLES 11上。

命令in /etc/inittab不工作在SLES 11上。
EN

Unix & Linux用户
提问于 2015-10-07 10:05:45
回答 1查看 1.6K关注 0票数 2

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

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

添加到inittab的内容:

代码语言:javascript
复制
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 ; }'

在终端上执行命令时,它可以正常工作。产出如下:

代码语言:javascript
复制
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的另一行将被执行。

请帮我找到我做错的地方。

EN

回答 1

Unix & Linux用户

发布于 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是配置在启动时启动的一些东西的标准工具。这是你系统上所有其他服务所使用的。让一项服务采取不同的行动只会使事情变得混乱。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/234485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档