1、以daemon方式启动rsync为例子,文件为 /tmp/restart_rsync.py
# -*- coding: utf-8 -*-
import os
if __name__ == "__main__":
#杀掉进程
pid_path = "/var/run/rsyncd.pid"
if os.path.exists(pid_path):
f = file(pid_path,"r")
pid = f.read()
f.close()
kill_cmd = "kill -9 %s"%pid
os.system(kill_cmd)
os.remove(pid_path)
start_cmd = "/usr/bin/rsync --daemon --config=/home/rsync/rsyncd.conf"
os.system(start_cmd)
2、crontab中配置
*/1 * * * * flock -xn /tmp/restart_rsync.lock -c "python /tmp/restart_rsync.py"
3、定时器执行一遍rsync服务重启,之后,定时器执行,rsync进程再也不重启了
4、通过lvsof 查看文件句柄
lsof |grep restart_rsync.lock
发现restart_rsync文件被 rsync服务打开,没有释放
5、解决办法:
去掉flock
遇到这种需要启动daemon进程的情况,可以依据上面 /tmp/restart_rsync.py 代码的原理,
自己去找到服务的pid,然后杀掉,再重启
定时器修改如下:
*/1 * * * * python /tmp/restart_rsync.py