一、cron服务
cron是一个linux下的定时执行工具
Ubuntu 16.4下是cron服务,其他linux系统,如CentOS是crond服务。
Ubuntu:(如果权限不够,在前面加上sudo)
service cron start //启动服务
service cron stop //关闭服务
service cron restart //重启服务
service cron reload //重新载入配置
service cron status //查看服务状态
CentOS:(我没有测试)
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
/sbin/service crond status //查看服务状态
设置服务开机自启动:
- Ubuntu:(如果权限不够,在前面加上sudo)
两种方式:
1. 使用sysv-rc-conf进行设置:
安装命令:sudo apt-get install sysv-rc-conf
若安装过程出现错误,尝试修复,再重新执行命令:
sudo apt --fix-broken install
sudo apt-get update
sudo apt-get upgrade
查看cron服务是否开启:sysv-rc-conf --list
这里我的显示为:cron 2:on 3:on 4:on 5:on ,默认开启了,数字对应runlevel(0-6)
若没有开启,设置开机自启:
sysv-rc-conf cron on
(也可以加上level,如:sysv-rc-conf --level 2345 cron on)
2. 使用update-rc.d进行设置:
这个我没有尝试,简述该命令如下:
update-rc.d [-n] [-f] name remove
update-rc.d [-n] name defaults
update-rc.d [-n] name disable|enable [ S|2|3|4|5 ]
- CentOS:(我没有测试)
chkconfig crond on
二、 crontab相关命令
crontab -l //列出用户任务
crontab -r //删除用户任务
crontab -e //编辑用户任务
crontab -u //指定用户
三、定时任务命令格式
* * * * * command
五个*对应含义:
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names)
day of week 0-7 (0 or 7 is Sun, or use names)
可以使用命令"info crontab",查看命令的相关用法,很清楚。
不想看命令说明,网上例子也很多,参考一下即可理解,写出自己需要的定时任务命令。
四、 创建定时任务
- 创建cron脚本文件,命名为test.cron,使用"vi test.cron"命令打开编辑
输入内容:20,40,59 * * * * echo "run" >> test.txt
表示每隔20分钟,执行一次打印命令 ,把"run",追加到test.txt文件中 - 添加定时任务,执行命令:
crontab test.cron
- 查看定时任务是否成功,执行命令:
crontab -l
也可以查看/var/spool/cron/crontabs
目录下是否生成,用户名对应的文件,如用户名为user,则会有user文件,使用命令cat user
,查看内容是否和要执行的任务一致。
五、注意事项
- 环境变量
问题:crontab的环境变量特别少,所以当执行某些命令时,会报错,导致无法完成任务。如,执行bash test.sh
, test.sh中的命令可能不会执行,因为没有找到bash。
解决:使用绝对路径,/bin/bash test.sh
,执行python等命令类似。
避免绝对路径很复杂的设置:先用命令切换到对应目录,再执行其他操作。 - 执行带有图形界面的程序
- 若系统在图形用户界面下,可以定时执行有图形界面的程序,但必须显示指定一个显示设备,步骤如下:
(因为我在远程终端输入命令,没有图形用户界面,此时什么都不显示,所以这里要求要在图形界面下。)
首先在图形用户界面下打开终端,输入命令:echo $DISPLAY
我的显示设备为:10.0
,(有的可能显示为:0
),然后将定时执行任务的命令修改为:
20,40,59 * * * * export DISPLAY=:10.0 && command
(ps: command为执行带图形界面的程序的命令,如gedit) - 若在远程终端没有图形界面,如:需要使用浏览器完成某任务,则需要打开无界面版的浏览器,执行相应任务。
- 日志
可以通过日志,查看任务执行情况。
参考:
- https://blog.csdn.net/ithomer/article/details/6817019
- https://blog.csdn.net/charles_neil/article/details/76468303
- https://stackoverflow.com/questions/20680050/how-do-i-install-chkconfig-on-ubuntu
- https://askubuntu.com/questions/914428/unmet-dependencies-when-trying-to-install-r-base?rq=1
- https://www.cnblogs.com/maseng/p/3658530.html