欢迎光临 www.huangdc.com

SaltStack Job 管理 及 saltutil.signal_job 模块的问题

SaltStack huangdc 3102℃ 0评论

什么是 Job

    在salt 中,每次执行一次salt命令就会产生一个Job ,Salt 实时管理的任务都是作为Job来执行的;在maste执行一次salt 命令,minion 就会产生一个唯一的 job id ,job id 可以在minion 机器 /var/cache/salt/minion/proc/ 查看 ,我们可以通过 job id 获取到job 的执行状态等信息

例如,测试环境如下:

    master : 192.168.202.72

    minion : 192.168.201.37

我们在master 执行一个命令: salt ‘192.168.201.37’ cmd.run “sh /root/dc.sh”

Job 常用管理命令 

(1)saltutil 模块中的 job管理⽅法  https://docs.saltstack.com/en/develop/ref/modules/all/salt.modules.saltutil.html

        saltutil.running #查看minion当前正在运⾏的jobs

        saltutil.find_job <jid> #查看指定jid的job(minion正在运⾏的jobs)

        saltutil.signal_job <jid> <single> #给指定的jid进程发送信号

        saltutil.term_job <jid> #终⽌指定的jid进程(信号为15)

        saltutil.kill_job <jid> #终⽌指定的jid进程(信号为9)

        ## salt ‘*’ saltutil.signal_job <job id> 15

(2)salt runner 中的job管理⽅法 https://docs.saltstack.com/en/develop/topics/jobs/index.html

        salt-run jobs.active     #查看所有minion当前正在运⾏的jobs(在所有minions上运⾏saltutil.running)

        salt-run jobs.lookup_jid  <jid>  #从master jobs cache中查询指定jid的运⾏结果

        salt-run jobs.list_jobs      #列出当前master jobs cache中的所有job

(3)runner 模块获取job 状态信息\

简单实例 

(1)在master 执行一个命令: salt ‘192.168.201.37’ cmd.run “sh /root/dc.sh”  ; 并查看job 的状态

(2)在master 执行一个命令: salt ‘192.168.201.37’ cmd.run “sh /root/dc.sh”  ; 并在中途通过job id  kill 掉这个 job 

 

Job 管理中的  signal_job 问题(如上问题)

    当我们在master 执行命令调用其他脚本的时候, saltutil.signal_job 把 job id kill 掉了,但是之前此 job 调用的脚本,并没有被kill 掉 。

    (1)linux 中,子进程及父进程的问题  , 我们可以来测试一下 linux 中是如何kill 掉进程及父进程的

          通过a.sh 脚本调用 dc.sh     (dc.sh 如上不变) , a.sh 如下:

            测试1 , kill 命令

测试2 , kill  -9 命令  (测试结果同上)

说明: kill 一般只能杀掉单个进程,同样,我们也可以发送信号给进程组

        好,测试3,kill — -<gpid> (kill 掉进程组)  ( 注意 两个横线<空格>一个横线<gpid>)

        查看组进程ID : ps efo pid,pgid,ppid,comm 

010632_vPag_588586.png

好了,终于把 父进程和 子进程都kill 掉了,,,问题又来了,,,为什么 salt  saltutil.signal_job 并没有把 子进程也kill 掉呢?

    (2)修改 minion 的 /usr/lib/python2.6/site-packages/salt/modules/saltutil.py  模块代码

我们来看一下 salt saltutil 模块的代码:/usr/lib/python2.6/site-packages/salt/modules/saltutil.py

好了,问题终于解决了,,,

总结,这里简单描述一下 salt job 的管理及遇到saltutil.signal_job 的问题

 

转载请注明:Huangdc » SaltStack Job 管理 及 saltutil.signal_job 模块的问题

喜欢 (6)or分享 (0)
发表我的评论
取消评论
表情