23

我有一个脚本,我需要在提交到 git 版本控制下的项目后运行该脚本。因此,我在我的项目 .git 目录中的子目录 /hooks 中创建了一个 post-commit 挂钩,将其命名为“post-commit”,并为其提供以下内容:

#!/bin/sh
# I am a post-commit hook
/usr/local/bin/my_script &

my_script 是可执行的并且在 /bin/sh 中运行良好。事实上,它的运行时间只有几秒钟,所以我希望它能够在后台运行并与当前 shell 分离。这就是为什么我把尾随的“&”放在我的钩子上。

现在的问题是,'&' 似乎被忽略了。当我在 OSX Lion 下使用 gitx 0.7.1 提交时,gitx 挂起的时间正是 my_script 需要运行的时间。

我尝试了很多,但不要让进程本身进入后台。

这里有什么问题?

4

4 回答 4

16

这是它对我的工作方式:

#!/bin/sh
# I am a post-commit hook
nohup /usr/local/bin/my_script &>/dev/null &
于 2011-11-15T07:24:56.240 回答
4

您也可以使用该at命令。您可能需要先安装它

echo /path/to/your/executable | at now

或者:

echo bash /path/to/your/script | at now

man at有关 at (或在线版本)的更多信息,请参阅 at(1) 手册页

于 2015-09-25T14:27:42.060 回答
2

尝试使用nohup

#!/bin/sh
# I am a post-commit hook
nohup /usr/local/bin/my_script &
于 2011-10-27T14:25:31.673 回答
1

如果您更改#!/bin/sh#!/bin/bash(假设您可以使用 bash)并使用nohup,那么您的示例应该可以工作。

于 2015-05-07T06:05:17.763 回答