对init.d更深入的理解 – 他们可以调用什么? 环境是什么?

我需要一些关于Linux上的init.d系统的教育(在我的例子中是Ubuntu 12.04,64位),我发现了数百个网站(不是我没有看全部,但是我看过其中的一些)告诉我如何编写一个init.d脚本以及如何在/etc/rc2.d中创build符号链接。 我仍然对理解能力和制作Google查询的能力稍有欠缺,这些问题可以帮助我获得所需的答案。 所以,

我知道我的init.d脚本启动。 我有它回声日志消息到一个文件,因此我知道它正在运行,例如在任何用户的.profile运行之前。 问题是,它正在执行的环境的性质是什么。 发送到STDOUT的输出会发生什么? 它写在一个虚拟terminal的地方? 它会影响任何东西吗?

我实际上想从init.d脚本启动的“程序”是一个shell脚本my_shell_script ,它包裹着我真正的程序my_program 。 该脚本设置了一堆环境variables,包括PATHLD_LIBRARY_PATH ,然后启动my_program

我应该修改启动my_program将其输出redirect到/ dev / null的行吗? 同上STDERR? 如果发射线有一个NULL <1(或它是NULL <&1?),所以STDIN被断开?

在我的init.d脚本中,当我想启动shell脚本时,调用它的正确方法是什么?

my_shell_script 

要么

 . my_shell_script 

要么

 sh my_shell_script 

我应该用sh还是bash。 我想使用一个必要的脚本function? 即bash是否有非sh bash?

当init.d脚本尝试启动my_shell_script时 ,是否需要在STDIN,STDERR和STDOUT上执行相同的redirect?

现在,my_program最初是作为带有一个graphics窗口的terminal启动程序而开发的。 主程序启动graphics窗口,然后启动两个单独程序运行的xterm(我不知道为什么,我inheritance了它)。所有这三个程序永远运行,但不是守护进程:只是无限循环。 主程序监视以确保其他两个正在运行,并将重新启动,如果他们确实停止。

如果这个程序,我会成为守护进程? 还是非终止的应用程序好吗? 在my_shell_script rmd的启动行中加上 &so的脚本可以继续启动并返回到init.d脚本?

my_program ,检测到graphics窗口可能不启动(所以我可以telnet / ssh到运行的服务器上,并(重新启动它))。 如果没有运行GUI窗口,它会在同一个terminal(telnet)窗口中启动另外两个子程序,所有的graphics输出将作为非graphics文本输出发送到该terminal和日志文件。

当我将ssh / telnet到我的开发服务器时, .profile会运行, .profile几乎包含了my_shell_script包含的所有内容,除了它使用屏幕程序启动my_program,以便telnet / ssh会话的注销不会终止正在运行的my-程序 。 我需要在init.dscheme中将屏幕程序包裹在my_program中。

init.d时间环境看起来像一个terminal吗? 我假设它看起来像运行级别1的环境,GUI窗口不能打开,“terminal”是唯一的输出。

最后,停止正在运行的应用程序的最佳方法是什么? 现在,当他们作为用户应用程序运行时,我使用killall来阻止他们无法告诉他们closures自己。

 http://upstart.ubuntu.com/cookbook/ 

Upstart是Ubuntu的init系统。 食谱应该是有帮助的。

如果你想连接到从init系统启动的terminal,你最希望给tmux一个尝试。