shellのコマンドをtask登録してworkerに実行させる
別にGearmanでやる必要は無いし危険だしどのworkerが実行するかわからないから意味ないけど
別のマシンにshellのコマンドを実行させられる
client側
#!/usr/bin/env ruby require 'rubygems' require 'gearman' c = Gearman::Client.new(['192.168.200.243:7003']) taskset = Gearman::TaskSet.new(c) cmd = ARGV.join(' ') task_cmd = Gearman::Task.new('remotecmd', cmd) task_cmd.on_complete{|stat| puts stat } taskset.add_task(task_cmd) taskset.wait(100) # 100sec
worker側
require 'rubygems' require 'gearman' Gearman::Util.debug = true w = Gearman::Worker.new(['localhost:7003']) w.add_ability('remotecmd'){|cmd,job| puts cmd `#{cmd}` } while true do w.work end
% ruby gearman-remotecmd-client.rb ls 1257764063 1259242737 4106454938_ab09a76a0e_b.jpg 4106455190_7164daa541.jpg gearman gearman-download-worker.rb gearman-download-worker.rb~ gearman-eval-worker.rb gearman-eval-worker.rb~ % ruby gearman-remotecmd-client.rb ls / bin boot cdrom dev etc home initrd.img initrd.img.old lib lost+found media mnt opt proc root sbin selinux srv sys tmp usr var vmlinuz vmlinuz.old % ruby gearman-remotecmd-client.rb df ファイルシステム 1K-ブロック 使用 使用可 使用% マウント位置 /dev/sda1 19734388 3683908 15048028 20% / tmpfs 383936 0 383936 0% /lib/init/rw varrun 383936 136 383800 1% /var/run varlock 383936 0 383936 0% /var/lock udev 383936 152 383784 1% /dev tmpfs 383936 128 383808 1% /dev/shm lrm 383936 2192 381744 1% /lib/modules/2.6.28-16-generic/volatile .host:/ 383647744 241258456 142389288 63% /mnt/hgfs % ruby gearman-remotecmd-client.rb sudo halt