S/O,
我一直在尝试解决我正在开发的网络应用程序的自动部署问题,我已经设置了一个 git post-receive Hook 来处理 artisan 迁移、composer 更新、npm 更新,然后运行 Grunt 以复制、丑化等我所有必要的 Assets 。
为了本地开发,我的 Grunt 任务在一切完成后执行 grunt-contrib-watch。现在,我不想经历为开发和暂存设置单独的 Gruntfile 的麻烦,所以在我的后接收中,我正在执行 Gruntfile.js 然后尝试终止进程(所以 watch 不会保持在登台服务器上运行)。
我的 post-receive 的最后两行看起来像这样:
grunt --gruntfile /dir/dir/Gruntfile.js >> log.txt
pkill grunt -e >> log.txt
但是,这似乎并没有终止进程,因为 ps aux | grep grunt
仍然返回一个事件进程,并且没有相关输出附加到我的 log.txt
文件。
如有任何想法,我们将不胜感激。
谢谢!
最佳答案
好的,我通过两种方式解决了这个问题:
第一种方法是在 grunt 调用的末尾附加一个 &,将 CLI 的控制权交还给我的接收后脚本。这行得通,但它要求我在 pkill 之前在那里睡一觉,以确保 grunt 任务在它终止进程之前完成。这不是我想要的那种模棱两可的控制。
因此,我继续研究如何在我的 Gruntfile 中设置一个单独的任务用于暂存。这比我最初预期的更容易、更实用。
注册了一个单独的任务,最后没有执行 watch,我所要做的就是像这样执行 grunt:
grunt --gruntfile /dir/dir/Gruntfile.js staging >> log.txt
其中staging
是我在grunt中注册的任务名称。请注意,在没有这个额外参数的情况下运行时,Grunt 只会执行 default
任务,因此它仍然完全按照我希望的方式在本地运行,而无需对我的工作流程进行任何更改:)
无论如何,谢谢大家。希望有人觉得这个答案有用!
关于linux - 在 Git post-receive hook 中杀死 Grunt 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33789358/