crontab任务堆积导致启动大量进程的处理(flock)

crontab在执行任务过程中,可能由于任务执行错误或者在下一个任务开始前,前一个任务没有执行完成,导致大量的进程产生,最后导致死机等。
可以使用flock来加锁防止启动大量进程:

flock [-sxon][-w #] file [-c] command

-s, --shared:    获得一个共享锁
-x, --exclusive: 获得一个独占锁
-u, --unlock:    移除一个锁,通常是不需要的,脚本执行完会自动丢弃锁
-n, --nonblock:  如果没有立即获得锁,直接失败而不是等待
-w, --timeout:   如果没有立即获得锁,等待指定时间
-o, --close:     在运行命令前关闭文件的描述符号。用于如果命令产生子进程时会不受锁的管控
-c, --command:   在shell中运行一个单独的命令
-h, --help       显示帮助
-V, --version:   显示版本

任务堆积的大量进程的处理:

ps -ef | grep command | grep -v grep | awk '{print $2}' | xargs kill

任务举例:

30 0 * * * flock -xn /tmp/redis_backup.lock -c '/home/xxx/xxx.sh >> ~/xxx.log 2>&1'

你可能感兴趣的:(异常处理及常用问题)