Linux 下定时执行脚本(更新版)

在项目里用到 saltstack 来管理哑节点,开启的 proxy 不定时就会不响应 RPC 命令,只能写一个定时重启脚本,脚本就很简单了:

杀掉已有的 proxy 进程再开启新的。

但是定时执行以前没有接触过,感觉很有意思。需要修改的文件位于 /etc/crontab

最后一行:
每分钟 9-22 点 天 周 月 root 用户 脚本路径


    1. 8 更新:

脚本执行几天后,发现了一个问题,即在使用 grep 命令时也开启了一个进程,这个进程的 PID 可能排在 proxy 的 PID 之前,在杀掉进程的时候取的是匹配到的第一项,那么就有可能杀掉的是 grep 的进程,而不是 proxy 的,从而造成不仅没能杀掉旧的,还开启了更多新的,造成重复,如图:

grep 的进程排在 proxy 的进程之前,后面的进程无法被 kill

解决的方法是,按照运行时间顺序显示进程,然后提取最后一行(也就是最早开启的进程)的 PID:

这下应该就没有问题了~


    1. 8 更新:

如果是要把 .py 文件添加定时任务的话,crontab 这样写:

#                   python安装路径   .py文件路径                   标准输出和错误重定向到文件
*/1 8-23 * * * root /usr/bin/python /usr/local/bin/delBadNodes.py > /tmp/load.log 2>&1 &

python 的安装路径可以用这个命令查看:

# which python
/usr/bin/python

附 Python 脚本:

import subprocess

p = subprocess.Popen('salt "*" test.ping', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)  
p.wait()  
out, err = p.communicate()

line = out.splitlines()

count = 0
for l in line:
    if count % 2 == 0:
        lastline = l
    else:
        if l.strip() != "True":
            q = subprocess.Popen("salt-key -d " + lastline.rstrip(":") + " -y", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)  
    count += 1

你可能感兴趣的:(Linux 下定时执行脚本(更新版))