23213 发表于 2016-4-20 09:34:36

saltstack学习笔记9-JOB

saltstack里面执行任何一个操作都会在master上产生一个jid号,就像上一节存储到redis上的数据显示的一样


./redis-cli monitor
OK
1461054358.412376 "SELECT" "0"
1461054358.412717 "SET" "minion1:20160419162558137768" "{\"fun_args\": [\"hostname\"], \"jid\": \"20160419162558137768\", \"return\": \"minion1\", \"retcode\": 0, \"success\": true, \"fun\": \"cmd.run\", \"id\": \"minion1\"}"
1461054358.413143 "LPUSH" "minion1:cmd.run" "20160419162558137768"
1461054358.413482 "SADD" "minions" "minion1"
1461054358.413791 "SADD" "jids" "20160419162558137768"
1461058032.241332 "SELECT" "0"
1461058032.241541 "SET" "minion1:20160419172712073319" "{\"fun_args\": [\"free -m\"], \"jid\": \"20160419172712073319\", \"return\": \"             total       used       free   shared    buffers   cached\\nMem:         988      826      162          0         41      545\\n-/+ buffers/cache:      239      749\\nSwap:         4095          0       4095\", \"retcode\": 0, \"success\": true, \"fun\": \"cmd.run\", \"id\": \"minion1\"}"
1461058032.242293 "LPUSH" "minion1:cmd.run" "20160419172712073319"
1461058032.242815 "SADD" "minions" "minion1"
1461058032.243637 "SADD" "jids" "20160419172712073319"

minion端会在cache目录下的proc目录创建一个以jid为名称的文件,这个文件里面的内容就是此次操作的记录,当操作处理完成后该文件会自动删除。而master端会记录每次操作的详细信息,这个记录都是存在master端cache目录下jobs下。下面通过实例来了解日常job管理。

通过salt-run来管理job

salt-run -d|grep jobs
'jobs.active:'
    Return a report on all actively running jobs from a job id centric
      salt-run jobs.active
'jobs.list_job:'
      salt-run jobs.list_job 20130916125524463507
'jobs.list_jobs:'
    List all detectable jobs and associated functions
      salt-run jobs.list_jobs
'jobs.lookup_jid:'
      salt-run jobs.lookup_jid 20130916125524463507
      salt-run jobs.lookup_jid 20130916125524463507 outputter=highstate
'jobs.print_job:'
      salt-run jobs.print_job 20130916125524463507

这里会显示salt-run关于job操作的所有命令,关于每个参数的解释大家可以通过salt-run -d jobs来查看

salt 'minion1' cmd.run 'sleep 100;whoami'

^CExiting on Ctrl-C
This job's jid is:
20160419174043844662
The minions may not have all finished running and any remaining minions will return upon completion. To look up the return data for this job later run:
salt-run jobs.lookup_jid 20160419174043844662

等待时间过长这里直接ctrl-C了,可以看到jid号
salt-run jobs.lookup_jid 20160419174043844662

查看这个job的详细记录
salt-run jobs.list_job 20160419174043844662
Arguments:
    - sleep 100;whoami
Function:
    cmd.run
Minions:
    - minion1
Result:
    ----------
    minion1:
      ----------
      return:
            root
StartTime:
    2016, Apr 19 17:40:43.844662
Target:
    minion1
Target-type:
    glob
User:
    root
jid:
    20160419174043844662

通过saltstack module来管理job
上面已经介绍通过salt-run可以对日常job进行管理,为什么要用module来管理job呢。salt-run对job管理功能比较局限,上面我们也看到了目前salt-run不支持kill某个job。现在我们就开始介绍使用saltstack自带的module来管理job

查看相关module的用法
salt '*' sys.doc saltutil|grep job
'saltutil.find_cached_job:'
    Return the data for a specific cached job id
      salt '*' saltutil.find_cached_job <job id>
'saltutil.find_job:'
    Return the data for a specific job id
      salt '*' saltutil.find_job <job id>
'saltutil.kill_job:'
    Sends a kill signal (SIGKILL 9) to the named salt job's process
      salt '*' saltutil.kill_job <job id>
      salt '*' saltutil.runner jobs.list_jobs
'saltutil.signal_job:'
    Sends a signal to the named salt job's process
      salt '*' saltutil.signal_job <job id> 15
'saltutil.term_job:'
    Sends a termination signal (SIGTERM 15) to the named salt job's process
      salt '*' saltutil.term_job <job id>

我们继续按照上面的例子来测试
salt 'minion1' cmd.run 'sleep 100;whoami'

终止命令获得jid
20160419175202067782

使用module来管理job
salt 'minion1' saltutil.find_job 20160419175202067782
minion1:
    ----------
    arg:
      - sleep 100;whoami
    fun:
      cmd.run
    jid:
      20160419175202067782
    pid:
      25659
    ret:
    tgt:
      minion1
    tgt_type:
      glob
    user:
      root

我们还可以直接kill掉这个job
salt 'minion1' saltutil.kill_job 20160419175202067782

页: [1]
查看完整版本: saltstack学习笔记9-JOB