我有一个脚本,我需要在git版本控制下提交项目后运行。因此,我在子目录/ hooks中的项目.git目录中创建了一个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需要运行的时间内挂起。
我尝试了很多,但是没有把过程本身带到后台。
这里有什么问题?
答案 0 :(得分:14)
以下是它对我有用的方法:
#!/bin/sh
# I am a post-commit hook
nohup /usr/local/bin/my_script &>/dev/null &
答案 1 :(得分:4)
您也可以使用at
命令。您可能必须先安装
echo /path/to/your/executable | at now
或强>
echo bash /path/to/your/script | at now
有关at(man at
或the online version)的更多信息,请参阅at(1)手册页
答案 2 :(得分:2)
尝试使用nohup
#!/bin/sh
# I am a post-commit hook
nohup /usr/local/bin/my_script &
答案 3 :(得分:1)
如果您将#!/bin/sh
更改为#!/bin/bash
(假设您可以使用bash)并使用nohup
,那么您的示例应该有效。