赞
踩
Linux crontab是用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。在Ubuntu中可以通过以下命令安装crontab工具:
sudo apt-get install cron # 安装
sudo service cron start # 启动
sudo service cron restart # 重启
sudo service cron stop # 停止
sudo service cron status # 查看状态
sudo service cron # 查询cron可用的命令
crontab -l
cat /etc/passwd | cut -f 1 -d: | xargs -I {} crontab -l -u {} | grep -v "^#"
如果是使用了NIS认证服务的从服务器(从节点),则可以使用以下命令查看所有用户的定时进程:
ypcat passwd | cut -f 1 -d: | xargs -I {} crontab -l -u {} | grep -v "^#"
或者创建下面的crontab_all_user.sh
文件:
#!/bin/bash
# vim filename打开文件,执行 : set ff=unix 设置文件为unix,然后执行:wq,保存成unix格式。
for u in $(cat /etc/passwd | cut -d":" -f1)
do
echo $u>>temp.txt
crontab -l -u $u >> temp.txt
done
cat temp.txt
rm temp.txt
然后运行该命令,同样可以查看所有用户的定时进程:
bash crontab_all_user.sh
Linux 任务调度的工作主要分为以下两类:
使用以下命令编辑定时进程:
crontab -e
注意: 第一次进入的时候要选择编辑器,选择后你可以配置新cron作业了,一般是选vim.basic
。
同时,可以通过参数-u user
来设定某个用户的crontab服务。
CRON表达式是一个字符串,包含五个到七个由空格分隔的字段(每种软件不一样),表示一组时间,通常作为执行某个程序的时间表。注释以注释标记#
开始,并且必须单独在一行上。在Linux中,CRON表达式为:
f1 f2 f3 f4 f5 program
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
例如:
0 */12 * * * [user] [command]
每一分钟执行一次 /bin/ls:
* * * * * /bin/ls
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分…执行 echo “Hello world”:
20 0-23/2 * * * echo "haha"
每月1号和15号检查/home 磁盘:
0 0 1,15 * * fsck /home
使用工具https://tool.lu/crontab可以计算CRON表达式的执行时间,例如:
字段 | 是否必填 | 允许值 | 允许特殊字符 | 备注 |
---|---|---|---|---|
Seconds | 是 | 0–59 | *,- | 标准实现不支持此字段 |
Minutes | 是 | 0–59 | *,- | |
Hours | 是 | 0–23 | *,- | |
Day of month | 是 | 1–31 | *,-?LW | ?LW只有部分软件实现了 |
Month | 是 | 1–12 or JAN–DEC | *,- | |
Day of week | 是 | 0–7 or SUN–SAT | *,-?L# | ?L# 只有部分软件实现了;Linux和Spring的允许值为0-7,0和7为周日;Quartz的允许值为1-7,1为周日 |
Year | 否 | 1970–2099 | *,- | 标准实现不支持此字段 |
,
用于分隔列表。例如,在第5个字段(星期几)中使用 MON,WED,FRI 表示周一、周三和周五。-
定义范围。例如,2000-2010 表示2000年至2010年期间的每年,包括2000年和2010年。“L”代表“Last”。当在星期几字段中使用的时候,可以指定给定月份的结构,例如“最后一个星期五”(5L)。在月日字段中,可以指定一个月的最后一天。
“day of month”字段可以使用“W”字符。指定最接近给定日期的工作日(星期一-星期五)。例如,15W,意思是:“最接近该月15日的工作日。”;所以,如果15号是星期六,触发器在14号星期五触发。如果15日是星期天,触发器在16日星期一触发。如果15号是星期二,那么它在15号星期二触发。“1W”,如果这个月的第一天是星期六,不会跨到上个月,触发器会在这个月的第三天(也就是星期一)触发。只有指定一天(不能是范围或列表)的时候,才能指定“W”字符。
星期几字段可以使用“#”,后面必须跟一个介于1和5之间的数字。例如,5#3表示每个月的第三个星期五。
在某些实现中,“?”用来代替“”以将月中的某一天或周中的某一天留空。其他cron的实现是替换“?”为cron守护进程的启动时间,例如:?? * * *,如果cron在上午8:25启动,将更新为25 8 * * * 并在每天的这个时间运行,直到再次重新启动。
分钟字段设置 */5表示每5分钟一次,注意:这里指的是能被5整除的分钟数。
crontab -r
crontab -ir
常用的参数有:
参数 | 说明 |
---|---|
-u user | 用来设定某个用户的crontab服务 |
file | file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab |
-e | 编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件 |
-l | 显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容 |
-r | 从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件 |
-i | 在删除用户的crontab文件时给确认提示 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。