老有人问我,服务器上那些重复的活儿是不是都得自己天天手动干?我说你要这么干,早晚把自己累死,还得祈祷别忘。备份数据库、清理日志、同步数据,这些就该交给定时任务,Linux里最常用的就是crontab。它不复杂,但新手总在时间格式上翻车,今天我就用最笨的大白话给你讲清楚,讲完你就能自己写。

crontab长啥样,先混个眼熟
一行crontab任务,就是五个时间数字加上一条命令。这五个数字各管各的:分钟、小时、日期、月份、星期。别被吓到,你只需要记住一个万金油写法——星号代表不管,具体数字代表指定。比如每天凌晨两点跑备份,那就是:0 2 * * * 后面跟你的命令。0表示0分,2表示凌晨2点,后面三个星号意思是日期、月份、星期全不管,天天都跑。
常用的几种写法,直接抄
我给你列几个高频场景,照着抄就行:每半小时执行一次,用 */30 * * * *;每天上午8点到晚上6点之间每隔两小时跑一次,写 0 8-18/2 * * *;每周一和周五的凌晨3点,写 0 3 * * 1,5;每月1号和15号凌晨4点,写 0 4 1,15 * *。看懂规律没?就是分时日月周五个坑位往里填,会填前两个,后面基本都是星号。
有个容易踩的坑必须提醒:当日期和星期同时写了具体值,任务是在满足任一条件的时候执行,不是两个都要满足。比如 0 0 1 * 5 这种,是每月1号跑一次、每周五也跑一次,可不是只要每月1号且是周五才跑。这个逻辑跟很多人想的不一样,写的时候留个心眼。
编辑、查看、删除,就仨命令
crontab -e是编辑你自己的任务列表,进去就跟vim一样操作,写一行存一行;crontab -l是查看当前都有啥任务;crontab -r是把任务全删了,这个要小心,手一抖全没了,删之前先-l看一眼。系统级的任务表在/etc/crontab,还有/etc/cron.d这个目录,一般个人任务用crontab -e就够了,别上来就动系统级的。
任务不跑?八成是这几个原因
定时任务不执行,十有八九栽在这几件事上。第一,命令没写绝对路径。crontab运行的时候环境很干净,PATH里没你登录时那些路径,你写个python3它可能压根找不到,得写成/usr/bin/python3这种全路径,脚本里的路径同理。第二,脚本没有执行权限或者首行没写#!/bin/bash。第三,crond服务压根没跑,先systemctl status crond看一眼。
怎么验证任务到底跑没跑
验证也简单,三步走。先把脚本拿到命令行手动跑一遍,确认脚本本身没问题,很多所谓定时任务不执行,其实是脚本自己就报错。再给任务加上输出重定向,把标准输出和错误都写进日志文件,像这样:0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1,跑没跑、报啥错,日志里一清二楚。最后去系统日志里翻执行记录,CentOS看/var/log/cron,Debian/Ubuntu看/var/log/syslog,grep一下你的脚本名就能看到crond到底调没调它。
说点经验之谈
干这行久了你会发现,定时任务出问题,八成不是crontab本身,而是环境、权限、路径这些细节。所以我的习惯是:所有定时任务必须带日志重定向,必须写绝对路径,脚本里该cd的cd、该chmod的chmod,一个都不能省。还有,重要任务执行时间避开业务高峰,备份就放凌晨跑,别跟用户抢资源。把这几点养成习惯,crontab就能成为你最省心的助手,而不是三天两头给你添堵的捣蛋鬼。对了,写完任务最好crontab -l再核对一遍,别光写不验,等出事儿了才想起来检查,那学费可就交得冤了。反正记住,定时任务就是你的小管家,调教好了能给你省老鼻子事儿。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!