如何运行系统命令,并将PID管道传递到pidfile?

Hen*_*hiu 0 ruby unix

如何运行命令并将生成的pid传递到pid文件中?

我正在寻找一个UNIX命令,但如果有办法在Ruby中做到这一点,那也很好.

我试过了:

bundle exec clockwork clock_local.rb echo $! > #{current_path}/tmp/pids/clockwork.pid
Run Code Online (Sandbox Code Playgroud)

它似乎将整个输出传递给pidfile而不仅仅是pid.

the*_*Man 7

您可以使用Ruby BEGIN {...}END {...}帮助自动创建和删除PID文件.将这些添加到Ruby脚本:

BEGIN { File.write("#{ $0 }.pid", $$) }
END { File.delete("#{ $0 }.pid") }
Run Code Online (Sandbox Code Playgroud)

您可以测试他们使用简单的脚本创建一个简单的PID文件,如:

BEGIN { File.write("#{ $0 }.pid", $$) }
END { File.delete("#{ $0 }.pid") }
sleep 60
Run Code Online (Sandbox Code Playgroud)

运行它,然后,当它运行时检查它所在的目录是否为pid文件.一分钟后,sleep到期时PID文件应自动消失.

如果文件不可写或者文件已经存在并被锁定,那些不会进行任何异常处理.END如果脚本收到CNTRL+ C并自动删除PID文件,将触发.

您想要添加的其他内容将是对现有PID文件的测试,在创建后锁定文件以使其无法被覆盖,这可以通过使用独占锁保持打开来完成(请参阅参考资料flock).