linux定时任务

linux定时任务可使用at、cron、anacron进行定义,其中crontab最为常用。

at对只执行一次的任务,非常方便。

cron对24小时不间断的任务非常有用。

anacron对不连续运行的系统比较友好,适合周期性为:每日、每周、每月的任务。

at定时

安装 

yum install at

查看状态

systemctl status atd
systemctl start atd

配置定时任务

输入时间

[root@kmaster ~]# at 9:30 PM Tue

输入任务或执行脚本,回车

at> echo "hi"

使用Ctrl+d,保存并退出编辑

at> <EOT>
job 2 at Tue Oct 1 21:30:00 2019

示例中会在9:30输出一个“hi”字符串

at now + 10 years

十年后执行一个任务。

查看任务

atq
sudo atq

删除任务

atrm <任务编号>

crontab定时

crontab是制定好的任务列表。

cat /etc/crontab

检查是否安装

On CentOS:

rpm -q cronie

On Ubuntu:

dpkg -l cron

安装

On CentOS:

yum install cronie

查看状态

On CentOS:

systemctl status crond

On Ubuntu:

systemctl status cron

配置定时任务

vi /etc/crontab

定时任务表达式语法

minute hour day month day_of_week command

语法说明

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

示例:

37 * * * * root run-parts /etc/cron.hourly
23 5 * * * root run-parts /etc/cron.daily
19 3 * * 0 root run-parts /etc/cron.weekly
23 0 6 * * root run-parts /etc/cron.monthly

语法糖

@hourly path/to/script/backup-script.sh
@daily path/to/script/backup-script.sh
@weekly path/to/script/backup-script.sh
@monthly path/to/script/backup-script.sh
@reboot path/to/script/backup-script.sh

重启定时任务

On CentOS:

systemctl restart crond

On Ubuntu:

systemctl restart cron

anacrontab定时

配置定时

在anacrontab文件中配置定时任务

vi /etc/anacrontab

定时语法格式

period  delay  job-identifier  command

period

执行频率,以天、每天,每周、每月为单位,分别由@daily、@weekly和@monthly定义。也可直接用数字代替:1 – daily, 7 – weekly, 30 – monthly ,N – 具体天数。

delay

执行作业之前需等待的分钟数。

job-identifier

用于在日志中标识任务。

command

任务执行的命令或脚本

定时示例

@daily  10  example.daily  /bin/bash /home/aaronkilik/bin/backup.sh