2017-07-08 77 views
0

尝试使用grunt-kill创建一个任务,该任务将终止我的server-scorm任务,并最终执行任何相关任务。这些指令非常简短,因为它假定我知道所有关于PID文件(我不知道,而不是开发人员故障),并且Grunt Manual使它们引用0。Grunt pid文件和​​Grunt-kill

问题是我不知道如何正确引用PID文件路径以及Grunt使用的命名方案。

当我运行下面的命令,我可以得到的ID:

ps aux | grep grunt 

当然,做我没有什么好当PID的每一次变化,但是,所以我不能直接引用它。

的指示说把这个在配置:

kill: { 
    myService: { 
    src: [ 'my-service.pid' ] 
    }, 
    secondary: { 
    pid: 'secondary.pid' 
    } 
} 

这是如何使用它的一个例子...但['my-service.pid']我不知道怎么去说。

在我的情况下,命令咕噜任务我试图杀死的名称为server-scorm,所以我认为是:

kill: { 
    serverScorm: { 
    src: [ 'server-scorm.pid' ] 
    }, 
} 

当然,当我运行它,它不承认它。我得到这个:

kill:serverScorm task fail

似乎缺少一块这个谜题的是,我不能给server-scorm.pid或什么都其所谓。

如果你想知道为什么我不使用cntrl+c这是团队使用一个名为括号的IDE,它“很好”提供了一个咕噜声界面,你只需点击一个按钮,它就会运行一个命令......正如你可能已经猜到的那样,没有地方可以输入这样的命令。

+0

你可以尝试使用grunt-shell来运行如下所示:ps aux | grep grunt> server-scorm.pid并且有grunt kill取决于此。 – Revive

回答

1

我正在从GitHub上的bug报告中复制我的答案。

嗨@phillt grunt-kill插件不能本地确定任何进程的pid,因为没有pid,它会如何知道您想要哪个进程?每个应用程序“发现”它的方式可能不同,甚至可能运行多个进程。

有两种方式这个插件来确定PID:

  • 指定pid文件。这需要你试图杀死的进程将其pid写入文件。这是Unix中守护进程的常见模式,特别是当它们作为服务在后台运行时。该方法是在启动时,他们将应该杀死的主进程的PID写入已知位置的文件中,然后像grunt-kill这样的工具可以读取该文件并知道要杀死哪个进程。例如,RedHat上的Apache Web服务器通常会将其pid文件写入/var/run/httpd.pid之类的东西。我不熟悉server-scorm,所以不能确定它是否使用pid文件。
  • 指定PID本身或返回PID的函数。如果您有一种方法可以通过编程方式可靠地找到PID,那么可以将它作为函数写入Gruntfile中,并且grunt-kill将愉快地执行它以发现PID。你可以在ps aux附近放一些过滤器来找到pid。也许按进程名称和用户登录名过滤?

另一方面,我在电子学习领域工作,所以服务器scorm和适配框架会给我一些功课。 :)