• Rex::Commands


    task($name [, @servers], $funcref)
    这个函数用于创建一个新任务.
    
    
    key_auth;
    group myservers => "192.168.137.3";
    
     task "mytask", sub {
       say run "hostname";
     };
       
    [root@node01 Rex]# rex mytask
    [2017-05-06 16:45:19] INFO - Running task mytask on <local>
    node01
    
    创建指定机器的任务:
    
     task "mytask","192.168.137.3", sub {
       say run "hostname";
     };
       
    [root@node01 Rex]# rex mytask
    [2017-05-06 16:47:09] INFO - Running task mytask on 192.168.137.3
    node2
    [2017-05-06 16:47:21] INFO - All tasks successful on all hosts
    [root@node01 Rex]# 
    
    
    你也可以绑定多个机器,只需要用","分割机器名
    
    创建指定机器组的任务。
    可以用group函数定义一个机器组。
    
    
    
     task "mytask","192.168.137.3","192.168.137.2", sub {
       say run "hostname";
     };
       
    [root@node01 Rex]# rex mytask
    [2017-05-06 16:52:29] INFO - Running task mytask on 192.168.137.3
    node2
    [2017-05-06 16:52:41] INFO - Running task mytask on 192.168.137.2
    node01
    [2017-05-06 16:52:52] INFO - All tasks successful on all hosts
    
    
    
    创建指定机器组的任务:
    group "allserver" => "192.168.137.3","192.168.137.2";
    
     task "mytask2",group=>"allserver", sub {
       say run "hostname";
     };
       
    [root@node01 Rex]# rex mytask2
    [2017-05-06 16:54:27] INFO - Running task mytask2 on 192.168.137.3
    node2
    [2017-05-06 16:54:39] INFO - Running task mytask2 on 192.168.137.2
    node01
    [2017-05-06 16:54:50] INFO - All tasks successful on all hosts
    [root@node01 Rex]# 
    
    
    desc($description)
    
    设置任务描述。
    
    
    
    group($name, @servers)
    
    如果你想一次在一组机器执行任务,可以用group函数定义一个机器组,非常方便:
    
     
     group "servergroup", "192.168.137.2", "192.168.137.3","192.168.137.4";
    
     task "mytask3",group=>"servergroup", sub {
       say run "hostname";
     };
    [root@node01 Rex]# rex mytask3
    [2017-05-06 19:07:15] INFO - Running task mytask3 on 192.168.137.2
    node01
    [2017-05-06 19:07:27] INFO - Running task mytask3 on 192.168.137.3
    node2
    [2017-05-06 19:07:38] INFO - Running task mytask3 on 192.168.137.4
    [2017-05-06 19:07:47] WARN - Can't authenticate against 192.168.137.4 (unable to establish master SSH connection: master process exited unexpectedly)
    
    
    batch($name, @tasks)
    用 batch 函数可以在批处理中调用任务。
    
    
     batch "name", "task1", "task2", "task3";
    你也可以在终端中用-b参数. rex -b 批处理名称
    
    
    
     task "mytask3",group=>"servergroup", sub {
       say run "/sbin/ifconfig -a | grep inet";
     };
    [root@node01 Rex]# rex mytask3
    [2017-05-06 19:10:53] INFO - Running task mytask3 on 192.168.137.2
              inet addr:192.168.137.2  Bcast:192.168.137.255  Mask:255.255.255.0          inet6 addr: fe80::20c:29ff:fe29:8eac/64 Scope:Link          inet addr:127.0.0.1  Mask:255.0.0.0          inet6 addr: ::1/128 Scope:Host
    [2017-05-06 19:11:04] INFO - Running task mytask3 on 192.168.137.3
              inet addr:192.168.137.3  Bcast:192.168.137.255  Mask:255.255.255.0          inet6 addr: fe80::20c:29ff:fe14:8fc1/64 Scope:Link          inet addr:127.0.0.1  Mask:255.0.0.0          inet6 addr: ::1/128 Scope:Host
    [2017-05-06 19:11:16] INFO - Running task mytask3 on 192.168.137.4
    [2017-05-06 19:11:25] WARN - Can't authenticate against 192.168.137.4 (unable to establish master SSH connection: master process exited unexpectedly)
    [2017-05-06 19:11:25] ERROR - 1 out of 3 task(s) failed:
    [2017-05-06 19:11:25] ERROR - 	mytask3 failed on 192.168.137.4
    [2017-05-06 19:11:25] ERROR - 		Couldn't authenticate against 192.168.137.4. It may be caused by one or more of:
    [2017-05-06 19:11:25] ERROR - 		 - wrong username, password, key or passphrase
    [2017-05-06 19:11:25] ERROR - 		 - changed remote host key
    [2017-05-06 19:11:25] ERROR - 		 - root is not permitted to login over SSH
    [2017-05-06 19:11:25] ERROR - 		 at /usr/local/perl/lib/site_perl/5.22.1/Rex/TaskList/Base.pm line 342.
    [root@node01 Rex]# 
    
    
     group "servergroup", "192.168.137.2", "192.168.137.3","192.168.137.4";
    
     task "mytask3",group=>"servergroup", sub {
       say run "/sbin/ifconfig -a | grep inet";
     };
    
    
    batch "batchserver","mytask2","mytask3";
    
    [root@node01 Rex]# rex -b batchserver
    [2017-05-06 19:12:39] INFO - Running task mytask2 on 192.168.137.3
    Linux node2 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
    [2017-05-06 19:12:50] INFO - Running task mytask2 on 192.168.137.2
    Linux node01 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
    [2017-05-06 19:13:01] INFO - Running task mytask3 on 192.168.137.2
              inet addr:192.168.137.2  Bcast:192.168.137.255  Mask:255.255.255.0          inet6 addr: fe80::20c:29ff:fe29:8eac/64 Scope:Link          inet addr:127.0.0.1  Mask:255.0.0.0          inet6 addr: ::1/128 Scope:Host
    [2017-05-06 19:13:13] INFO - Running task mytask3 on 192.168.137.3
              inet addr:192.168.137.3  Bcast:192.168.137.255  Mask:255.255.255.0          inet6 addr: fe80::20c:29ff:fe14:8fc1/64 Scope:Link          inet addr:127.0.0.1  Mask:255.0.0.0          inet6 addr: ::1/128 Scope:Host
    [2017-05-06 19:13:24] INFO - Running task mytask3 on 192.168.137.4
    [2017-05-06 19:13:33] WARN - Can't authenticate against 192.168.137.4 (unable to establish master SSH connection: master process exited unexpectedly)
    [2017-05-06 19:13:33] ERROR - 1 out of 5 task(s) failed:
    [2017-05-06 19:13:33] ERROR - 	mytask3 failed on 192.168.137.4
    [2017-05-06 19:13:33] ERROR - 		Couldn't authenticate against 192.168.137.4. It may be caused by one or more of:
    [2017-05-06 19:13:33] ERROR - 		 - wrong username, password, key or passphrase
    [2017-05-06 19:13:33] ERROR - 		 - changed remote host key
    [2017-05-06 19:13:33] ERROR - 		 - root is not permitted to login over SSH
    [2017-05-06 19:13:33] ERROR - 		 at /usr/local/perl/lib/site_perl/5.22.1/Rex/TaskList/Base.pm line 342.
    [root@node01 Rex]# 
    
    
    do_task($task)
    在其他任务调用这个 $task。具体被执行的服务器就是在这个$task 中定义好的那些。
    
    
     task "task1", "server1", sub {
       say "Running on server1";
       do_task "task2";
     };
     
     task "task2", "server2", sub {
       say "Running on server2";
     };
    
     task "task1", "192.168.137.2", sub {
       say run "hostname";
       do_task "task2";
     };
     
     task "task2", "192.168.137.3", sub {
       say run "hostname";
     };
    
    batch "batchserver","mytask2","mytask3";
    
    [root@node01 Rex]# rex task1
    [2017-05-06 19:56:31] INFO - Running task task1 on 192.168.137.2
    node01
    [2017-05-06 19:56:43] INFO - Running task task2 on 192.168.137.3
    node2
    [2017-05-06 19:57:04] INFO - All tasks successful on all hosts
    
    
    
    
    parallelism($count)
    在指定机器上并行执行任务。 $count 指定线程数。
    
    
    
    needs($package [, @tasks])
    
    
    使用needs 你可以定义任务间的依赖,
    
    被依赖的任务将在和调用自己的任务完全相同的服务器上执行。
    
    
    
    依赖 所有的任务在包MyPkg,所有的任务会被请求 在server1
    

  • 相关阅读:
    .NET开发相关使用工具和框架
    Jquery.KinSlideshow 焦点图标轮换
    可能发生了架构损坏。请运行 DBCC CHECKCATALOG。
    mssql使用问题大合集
    做饭流程js
    点击导航切换和隐藏
    批量修改文件名后缀
    GB2312转码utf-8字符方法
    border三角形的3种方式
    移动端nav导航栏
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349722.html
Copyright © 2020-2023  润新知