Linux crontab 定时任务命令详解
一、简介
crontab 命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。通常,crontab 储存的指令被守护进程激活, cron 常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为 cron jobs。crontab 文件包含送交 cron 守护进程的一系列作业和指令。每个用户可以拥有自己的 crontab 文件;同时,操作系统保存一个针对整个系统的 crontab 文件,该文件通常存放于 /etc 或者 /etc 之下的子目录中,而这个文件只能由系统管理员来修改。crontab 文件的每一行均遵守特定的格式,由空格或tab分隔为数个领域,每个领域可以放置单一或多个数值。
二、安装&启动
cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务,或者可以在/etc/rc.d/rc.local这个脚本的末尾加上:/sbin/service cron start
- 启动 cron
user@ae01:~$ sudo service cron start cron start/running, process 32379 user@ae01:~$
user@ae01:~$ lsof | grep cron cron 32379 root cwd unknown /proc/32379/cwd (readlink: Permission denied) cron 32379 root rtd unknown /proc/32379/root (readlink: Permission denied) cron 32379 root txt unknown /proc/32379/exe (readlink: Permission denied) cron 32379 root NOFD /proc/32379/fd (opendir: Permission denied) user@ae01:~$
- 重新载入配置
user@ae01:~$ sudo service cron reload user@ae01:~$
- 停止 cron
user@ae01:~$ sudo service cron stop cron stop/waiting user@ae01:~$
user@ae01:~$ lsof | grep cron
user@ae01:~$
三、语法&参数
usage: crontab [-u user] file crontab [ -u user ] [ -i ] { -e | -l | -r } (default operation is replace, per 1003.2) -e (edit user's crontab) -l (list user's crontab) -r (delete user's crontab) -i (prompt before deleting user's crontab) user@ae01:~$
Note:每个用户都有自己的 crontab 文件,如果你操作其他用户的的 crontab 需要使用 -u 参数
- 查看 root 的crontab 列表
user@ae01:~$ sudo crontab -u root -l no crontab for root
- 配置 当前用户的 定时任务
user@ae01:~$ crontab -e
# For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
Note:crontab 的配置的格式说明:
#MIN HOUR DAY MONTH DAYOFWEEK COMMAND
进入编辑模式之后,编辑的内容一定要符合下面的格式:格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下:
分钟 (0-59)
小時 (0-23)
日期 (1-31)
月份 (1-12)
星期 (0-6)//0代表星期天
除了数字还有几个个特殊的符号就是"*"、"/"、"-"和",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字
四、练习
- 每天早上6点
0 6 * * * command line
- 每两个小时
0 */2 * * * command line
- 晚上11点到早上8点之间每两个小时,早上八点
0 23-7/2,8 * * * command line
- 每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * 1-3 command line
- 1月1日早上4点
0 4 1 1 * command line