crontab是用来定期执行程序的命令

命令

crontab [-u user] file
crontab [-u user] [ -e | -l | -r]
  • -e 编辑任务表
  • -l 列出任务表
  • -r 删除任务表

基本命令

列出定时任务

crontab -l

创建定时任务

crontab -e

删除定时任务

crontab -r

基本格式详解

# crontab基本格式
# +---------------- minute  分钟(0 - 59)
# |  +------------- hour    小时(0 - 23)
# |  |  +---------- day     日期(1 - 31)
# |  |  |  +------- month   月份(1 - 12)
# |  |  |  |  +---- week    星期(0 - 7) (星期天=0 or 7)
# |  |  |  |  |
# *  *  *  *  *  要运行的命令

示例

# 每一分钟执行一次
* * * * * myCommand

# 每小时第3和第15分钟
3,15 * * * * myCommand

# 在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand

# 每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2  *  * myCommand

# 每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand

# 每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart

# 每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart

# 每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart

# 每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart

# 每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart

# 每一小时重启smb
* */1 * * * /etc/init.d/smb restart

# 晚上11点到早上7点之间,每隔一小时重启smb
0 23-7 * * * /etc/init.d/smb restart

发送邮件设置

# 添加在首行
MAILTO='邮件地址'

# 不发邮件
MAILTO=''

测试

MAILTO='xxxxx@xxx.com' 
*/1 * * * *  echo "test"  # 每隔一分钟就会发送一封邮件

注意事项

  1. 脚本中涉及文件路径时写全局路径

常用命令

查看日志

journalctl _COMM=crond --since=today

遇到的问题

无法发送邮件

# 打开main.cf文件
vim /etc/postfix/main.cf

# 修改内容
inet_interfaces = localhost
inet_protocols = all

# 为
inet_interfaces = all
inet_protocols = all

service postfix start

you have mail or you have new mail

cat /var/mail/<username>

sudo rm /var/mail/<username>