BASH:Shell脚本作为Init脚本

时间:2011-07-08 20:24:39

标签: bash shell daemon init

我有一个调用java jar文件并运行应用程序的shell脚本。没有办法解决这个问题,所以我必须使用我的工作。

当你执行这个shell脚本时,它输出应用程序状态并且只是坐在那里(几乎是一个控制台);所以当程序发生某些事情时,它会更新屏幕。这与任何正常的非守护进程/后台进程类似。只有退出它的方法是ctrl-c,然后完全结束这个过程。我知道我可以通过执行path_to_shell_script/script.sh &来解决这个问题,这会为我的会话提供背景(如果我想退出,我可以使用nohup)。

我的问题是,我只是不知道如何将此脚本放入init脚本中。我编写了大部分的init脚本,但是当我尝试守护它时,它不起作用。我几乎让它工作,但是,当我运行initscript时,它实际上跨越脚本上的相同“控制台”,并且只是坐在那里直到我点击ctrl-c。这是有问题的一行:

daemon ${basedir}/$prog && success || failure

问题在于我不能只考虑daemon ${basedir}/$prog部分,我认为这就是我遇到问题的地方。有没有人成功为shell脚本创建init脚本?此外壳脚本也不是可守护的(您可以将它背景化,但底层程序不支持daemonize选项,否则我只是让应用程序完成所有工作)。

2 个答案:

答案 0 :(得分:1)

您需要打开一个子shell来执行它。它还有助于将其输出重定向到文件,或至少/ dev / null。

类似的东西:

#!/bin/bash
( 
  { daemon ${basedir}/$prog && success || failure ; } &>/dev/null
) &
exit 0

它的工作原理如下(列表)&在后台子shell中。 {list}是一个组命令,它用于捕获命令的所有输出并将其发送到/ dev / null。

答案 1 :(得分:0)

我最初使用分离的屏幕会话来运行半生活服务器和我的自定义“tail logfile”bash脚本。

在后台开始做事:

screen -dmS arbitarySessionName /path/to/script/launchService.sh

查看过程:

# screen -r arbitrarySessionName

希望你觉得这很有用,gl!