在配置期间创建连续后台作业

时间:2016-06-24 21:31:37

标签: vagrant

在配置VM期间,我想开始一个在后台运行的作业。此作业将不断检查某些文件是否已更改。在vagrant文​​件中,我引用了一个脚本,其中包含以下行(除了echo" x"每3秒执行一次):

nohup sh -c 'while true; do sleep 3; echo x; done' &

如果我直接在命令行中运行此作业,则可以使用作业来检查作业。

但是,如果我使用

从VM外部运行它
vagrant ssh -c "nohup sh -c 'while true; do sleep 3; echo x; done' &"

或者如果它作为配置的一部分执行,似乎没有任何事情发生。 (没有作业,也没有创建nohup.out文件。)

我尝试了以下两个问题的答案,这些问题似乎解决了同样的问题:

(1)This answer建议"正确守护"这对我没有用。我尝试了以下方法:

vagrant ssh -c "nohup sh -c 'while true; do sleep 3; echo x; done' 0<&- &>/dev/null &"

(2)second answer表示添加&#34;睡眠1&#34;哪个也不起作用:

vagrant ssh -c "nohup sh -c 'while true; do sleep 3; echo x; done' & sleep 1" 

对于在命令行上直接执行命令的两次尝试都工作正常,但是通过 vagrant ssh -c 执行它或者通过配置似乎没有做任何事情。

2 个答案:

答案 0 :(得分:2)

这是我的情况下的工作原理

Vagrantfile配置

hub.vm.provision "shell", path: "script/run-test.sh", privileged: false, run: 'always', args: "#{selenium_version}"

我将run-test脚本称为流浪用户(privileged: false

脚本的有趣部分是

nohup java -jar /test/selenium-server-standalone-$1.jar -role hub &> /home/vagrant/nohup.grid.out&

在我的情况下,我启动了一个java守护进程,并将nohup的输出重定向到我的vagrant home中的特定文件中。如果我检查作业是否正在运行并由流浪者用户拥有。

答案 1 :(得分:0)

对我来说,我在screen中运行命令,如:

screen -dm bash -c "my_cmd"

预配置外壳程序脚本中。