比如说我写了一个每过 1 分钟就会执行一次的脚本,但是在某个时刻这个脚本一分钟都还没有执行完,那么这个脚本就会同时两个在执行,如果脚本在操作数据库就很容易崩掉。 请问:怎么实现控制这个 rake 如果在执行就不会再执行了??
将进程号写到文件里,然后每次启动任务的时候都首先检查一遍是否有 pid 文件,并且里边的进程号是否有在运行,有的话就退出,没有就将新的进程号写入。每次任务完成之后删除进程号。代码是(未经验证,你自己要调试):
task :task_name => :environment do exit if another_process_running? File.open("path/to/your/task.pid", 'w') { |f| f.write(Process.id)} # 将进程号写进文件,方便其他进程用于检查 # 写完进程号,就可以放心的开始你的其他工作了 # 最后清除 pid 文件内容,或者删除也可以 File.open("path/to/your/task.pid", 'w') {|file| file.truncate(0) } end def another_process_running? pid = `cat #{Rails.root.join("path/to/your/task.pid")}`.to_i pid > 0 && process = `ps -p #{pid} | awk 'NR>1'`.present? # pid 存在,并且有正在运行的对应进程 end
你好,请问你们公司招 ruby 初级吗?我是今年刚毕业的应届生,做过几个月的 ror,在一篇帖子上说您在中电软件园做 ruby,想找一份 ruby 的工作。
#2 楼 @Talon 不招,公司换技术方案了