crontab是cron的配置文件,可将其成为作业列表。

crontab定时执行Shell脚本

常用指令:

#省略-u username表表示操作当前用户的
crontab -u username  
#编辑工作表([-u username]可以缺省)   
crontab -u username -e
#列出工作表里的命令([-u username]可以缺省) 
crontab -u username -l
#删除工作列表
crontab -u username -r

定时执行Shell脚本示例:

# 开启服务,首次开启需要选择编辑器,按需选取即可
sudo service crontab restart
# 继续输入以下指令进行工作表配置
crontab -u username -e

执行后,打开编辑器可以看到以下提示信息:
在这里插入图片描述
设定定时任务:

* * * * * test.sh
#从左到右,解释一下如果要更改执行时间,怎么修改上面的五个星号
# 第一个*代表分,可以填写0-59中的任意数值
# 第二个*代表时,可以填写0-23中的任意数值
# 第三个*代表天,可以填1-31中的任意数值
# 第四个*代表月,可以填1-12中的任意数值,或者jan,feb...
# 第五个*代表一星期中的某一天,可以填0-6中的任意数值,其中0代表星期天

#下面以每周的1,3,5早上9点执行tesh.sh为例
0 9 * * 1,3,5 test.sh

打开cron的log功能

方便调试,我们还需要设置让cron的log功能开启。

#打开conf文件,# 取消cron.log行注释
sudo vim /etc/rsyslog.d/50-default.conf
# 重启服务
sudo  service rsyslog  restart
# 查看cron.log
vim /var/log/cron.log

踩坑记录加解决方案

尝试定时运行后,发现没有执行成功,查看log之后,看到以下错误。

(CRON) info (No MTA installed, discarding output)

查询了一下,是因为我的定时脚本包含smtp发送邮件的功能,而Ubuntu系统不含MTA(Mail Transfer Agent),因此需要通过sudo apt-get install postfix安装邮件服务。

安装后,发现脚本依然没有执行成功,log信息过于简单,还是需要查看标准输出信息和执行时的错误信息才方便debug。

#修改示例脚本
0 9 * * 1,3,5 test.sh>test.out 2>&1

其中>test.out 表示将标准输出重定向写入到test.out文件中。2>&1表示将错误输出重定向到标准输出。
加入以上代码,则错误提示和脚本的标准输出都会打印到test.out中,也就是说,test.sh执行完成后,test.out中能看到所有输出的信息。

Logo

更多推荐