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'