Linux 在Git post接收钩子中杀死Grunt进程

Linux 在Git post接收钩子中杀死Grunt进程,linux,git,gruntjs,grunt-contrib-watch,git-post-receive,Linux,Git,Gruntjs,Grunt Contrib Watch,Git Post Receive,S/O 我一直在努力解决我正在开发的web应用程序的自动部署问题,我已经设置了一个git post receive挂钩,它处理artisan迁移、composer更新、npm更新,然后运行Grunt复制、uglify等我所有必要的资产 为了当地的发展,我的Grunt任务在一切完成后执行Grunt contrib watch。现在,我不想为开发和登台设置单独的GrunFile,所以在我的post接收中,我正在执行GrunFile.js,然后试图终止进程(因此watch不会在登台服务器上继续运行)

S/O

我一直在努力解决我正在开发的web应用程序的自动部署问题,我已经设置了一个git post receive挂钩,它处理artisan迁移、composer更新、npm更新,然后运行Grunt复制、uglify等我所有必要的资产

为了当地的发展,我的Grunt任务在一切完成后执行Grunt contrib watch。现在,我不想为开发和登台设置单独的GrunFile,所以在我的post接收中,我正在执行GrunFile.js,然后试图终止进程(因此watch不会在登台服务器上继续运行)

我的帖子的最后两行如下所示:

grunt --gruntfile /dir/dir/Gruntfile.js >> log.txt
pkill grunt -e >> log.txt
grunt --gruntfile /dir/dir/Gruntfile.js staging >> log.txt
但是,这似乎并没有终止进程,因为
ps aux | grep grunt
仍然返回一个活动进程,并且没有相关的输出附加到我的
log.txt
文件中

如果您有任何想法,我们将不胜感激


谢谢

好吧,我用两种方法解决了这个问题:

第一种方法是在grunt调用结束时附加一个&将CLI的控制权交还给我的post-receive脚本。这是可行的,但它需要我在PKLL之前在那里投入睡眠,以确保grunt任务在它终止进程之前完成。这不是我想对这项任务进行的那种模棱两可的控制

因此,我继续研究如何在Grunfile中设置一个单独的任务来进行登台。这比我最初预期的更简单、更实用

注册了一个单独的任务,但最后没有执行手表,我所要做的就是像这样执行grunt:

grunt --gruntfile /dir/dir/Gruntfile.js >> log.txt
pkill grunt -e >> log.txt
grunt --gruntfile /dir/dir/Gruntfile.js staging >> log.txt
其中,
staging
是我在grunt中注册的任务的名称。需要注意的是,Grunt在没有这个额外参数的情况下运行时只会执行
default
任务,因此它仍然可以完全按照我希望的方式在本地运行,而不会对我的工作流进行任何更改:)

谢谢大家。希望有人觉得这个答案有用