Linux 定时任务
January 5, 2018
很久以前就想找到一种定时执行任务的方法,下面介绍一种在Linux下通用的,也是最方便的方式。
cron #
这是Linux内核自带的一个定时执行任务的服务。默认是不打开,可以设置成开机自动启动。
要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local
脚本中加入 /sbin/service crond start
。
这是一个周期性执行某个程序的服务,与at
不同,at
是一次性的服务。显然这个服务更常用一些。
很多周期性的任务,如定期清缓存,写磁盘,做备份等等。
我用这个命令来自动更新我github.io上的博客代码。
crontab #
这是cron提供的一个命令,用来设定定时任务。 定时任务非常的简单,就是利用配置文件来描述什么时候执行什么动作,所以设定任务也就要写明白这些参数就可以了。
配置文件的基本格式 #
配置文件可以有很多个,存放在固定的目录下。服务启动以后会一起读取然后执行。
配置文件每行是一个定时任务的描述,包括6个字段:
- 分(0-59),
- 小时(0-23),
- 天(1-31),
- 月(1-12),
- 星期(0-7,0和7都是周日)
- 要执行的命令
举个例子:
0 8,22 * * 1-5 echo "Hello"
// 在周一到周五的8点和22点的时候输出”Hello“
//
// * 通配符
// 同一个字段多个值,用逗号隔开。
// 1-5表示一个区间
这个配置文件很好写,就不多举例子了。
启动服务 #
sudo /etc/init.d/cron start // start
sudo /etc/init.d/cron stop // stop
sudo /etc/init.d/cron restart // restart
crontab 用法 #
使用:
crontab –e : 修改 crontab 文件,如果文件不存在会自动创建。
crontab –l : 显示 crontab 文件。
crontab -r : 删除 crontab 文件。
crontab -ir : 删除 crontab 文件前提醒用户。
其中,-e
是编辑当前用户的配置文件,默认是存放在/var/spool/cron/crontabs/
目录下。
只要服务启动着,编辑保存这个文件,定时任务就设定好了,有的时候可能真正执行会有1-2分钟的延时。
注意事项 #
-
这个服务是一个后台运行的服务,所以像上面那个输出”Hello“的例子就是没用的,因为没有办法输出到你的终端。一般我们会把交互的部分放在文件里。
-
因为是个后台的进程,所以要把环境变量写成绝对的路径,不要以你的当前目录做参考,因为执行的时候是没有当前目录的。任何路径都要写绝对路径。
-
要被执行的命令可以直接写在这里,也可以写在脚本里,任务写你的脚本路径,就是执行脚本,注意脚本要有执行权限。