前言
在平时工作中,我们经常需要执行一些定时任务。 比如我的电脑每天晚上都会在凌晨1点开始sync代码,并执行编译。4点又会sync另一份代码。执行另一个编译任务。这无疑会提高我们白天的工作效率,因为每天到公司都不再需要同步代码, 并且已经有一份编译好的最新代码了。
当然,定时任务可以干的远不止这些,你可以定时跑monkey啊,定时检查东西发邮件等。
cron服务
Linux系统是由一个叫cron的服务来控制定时任务的。 Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。 (我们可以使用 service --status-all
来查看系统有哪些service运行,里面有这个cron服务, 直接查看该服务状态 service crond status
)
由于用户自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab (即 cron命令的table, 连起来就是crontab)
系统的cron服务会去读取以下几个路径的配置文件:
- /var/spool/cron/crontabs/ 各个用户的配置文件
我们通过sudo cat /var/spool/cron/crontabs/(用户名)
查看当前用户的定时任务文件 - /etc/crontab 系统的crontab
- /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
那么crontab命令就是帮助我们配置这个表并生效的。
crontab命令
ok, 我们在终端敲下: crontab –help
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)
那我们就来编辑一下, crontab -e , 会出来一个vi的编辑窗口,里面编辑的是我们的配置文件。我们配置一条1点1分执行一个脚本,如下配置保存即可。
#分 时 日 月 周 |<==============任务的完整命令行
01 01 * * * bash -l -c "~/xiamin-doc/task/a1-build.sh >> /tmp/build-a1.log"
当我们保存了上面的配置后, 其实就保存在 /var/spool/cron/crontabs/(用户名)
这个配置文件里了。并且cron服务会去读取表里额配置项执行了。
注意点:周与日月不可同时并存
30 12 11 9 5 root echo “just test” <==是错误的配置
系统可能会判定每个星期五作一次,或每年的 9 月 11 号分别进行,总之会出乎你的意料之外的。
总结
到此我们已经知道怎么去配置定时任务了,以及其原理了。 接下来就是大家编辑自己脚本,让其能够成为我们的工作小帮手了!