如何在启动进程后在Linux启动脚本中执行更多的命令

我正在尝试编写一个启动脚本,在服务器重新启动后执行应用程序(MapProxy)。 我的服务器运行Ubuntu 11.04 Natty 64位。

在脚本中,我执行一个python脚本exec python /$path/"config.py" &它成功地创build了一个web服务器可以与之通信的fcgi.socket。 但是,我需要使fcgi.socket可写或MapProxy将无法正常工作,即我需要对其执行chmod。

看来,在我操作config.py之后,我在启动脚本中失去了控制 – 它不会继续使fcgi.socket可写。 有任何想法吗?

 #! /bin/bash : exec python /$path/"config.py" & exec chmod o+w /$path/"fcgi.socket" & exit 0 

新脚本:

 #! /bin/bash python /$path/"config.py" && chmod o+w /$path/"fcgi.socket" 

并将进程发送到后台并立即执行下一个进程。 &&等待最后一个进程的返回值,如果它为零,则开始下一个进程。

删除你的exit 0是为了让你得到在脚本中最后执行的任何进程的错误代码。 它应该是零,但这样它会传播,如果你有一个错误。

删除exec&符号。 这将处理推迟到后台,以便下一个命令可以立即运行。 实际上,您正在更改尚不存在的文件的权限,因为第一个命令需要一些时间才能运行并创build套接字。

你似乎缺less的重要一点是exec部分正在做什么。 从bash的help exec :“用给定的命令replaceshell”。 当你说exec python /$path/"config.py"你的脚本实际上是这么说的:”我在这里完成了,让我们让python从这里执行,执行这个python脚本, exec python /$path/"config.py"返回的是我返回的内容。 所以以后在脚本中不会执行。 除非脚本是最后一个脚本,否则使用exit是没有意义的。

在脚本结尾处有“退出0”,表示“我的脚本应该终止,就好像一切都成功了,不pipe别的什么都失败了”。 如果这真的是你想要的,那么你不想使用exec,因为你的脚本退出代码将是你exec任何进程的退出代码。 相反,如果你得到一个python或chmod,你可能想返回一个实际的失败结果。