在配置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 执行它或者通过配置似乎没有做任何事情。
答案 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)