目录
1、使用 sleep 来完成定时任务
2、使用 crontab 来进行定时任务
3、使用 at 来执行单次的定时任务
1、使用 sleep 来完成定时任务
sleep n 等待 n 秒再继续往后执行
usleep n 等待 n 微秒再继续往后执行(1 秒等于 1 000 000 微秒)
# 定时,每分钟的第二十秒,输出一条信息
t=0
while [[ 1 -eq 1 ]]; # 无限循环
do
d=`date "+%S"`
d=`expr $d + 0` # 如果秒为个位数,则十位上有一个0,通过计算把0去掉
if [[ $d -eq 20 ]]; then
echo `date "+%Y-%m-d %H-%M-%S"`
((t++))
sleep 1 # 间隔一秒后继续,不然程序执行太快,同一秒可能会输出多次
fi
if [[ $t -gt 3 ]]; then # 只进行四次
break
fi
done
2、使用 crontab 来进行定时任务
确保 crond 服务处于启动状态:systemctl start crond。
crontab -l | 查看当前有哪些定时任务 |
crontab -e | 添加定时任务 |
crontab -r | 删除目前的定时任务 |
crontab -e 后,进入到编辑器中,每一行编写一个定时任务,格式说明如下。
program 可以是一个命令,也可以是一个 Shell 程序,推荐将定时执行的程序放到一个 Shell 程序中,让定时任务去执行 Shell 程序。
每分钟执行一次 /self/timing/outputTime.sh 这个程序(注意这个 Shell 程序要有执行权限。chmod u+x outputTime.sh 为用户添加执行权限):
定时任务开启后,每隔一分钟,第一句的结果将通过邮件发送到 /var/spool/mail/root 中,第二句的结果将添加到指定的文件末尾(由于输出的文件是相对路径,当前的用户为 root,则crontab 执行后,会输出到 /root/outputTime.txt 中,即用户主目录下的 outputTime.txt 文件中 )。
分 时 月中第几日 第几月 周几
# 每两个小时执行一次,最后的 & 表示在后台进行执行,它不会阻塞cron的执行,允许cron继续检查和执行其他任务
0 */2 * * * /self/outputTime.sh &
# 每天7:30执行一次
30 7 * * * /self/outputTime.sh
# 每月1号和15号的22点执行一次
0 22 1,15 * * /self/outputTime.sh
# 每小时的第一分执行一次
1 * * * * /self/outputTime.sh
# 每周一至周五3点执行一次
0 3 * * 1-5 /self/outputTime.sh
# 每月的1、11、21、31日执行一次
30 6 */10 * * /self/outputTime.sh
crontab 的日志通常记录在系统的 /var/log/cron 或 、/var/log/syslog 中
3、使用 at 来执行单次的定时任务
首次使用时安装 at :yum install at
启动 atd 服务:systemctl start atd
at 基本格式
at [选项] [要执行的时间]
时间可以是相对的也可以是绝对的。相对时间的设定是使用 now + 从现在开始要经过的时间。
at now + 3 minutes
at now + 3 hours
at now + 3 days
at now + 3 weeks
at now + 3 months
at now + 3 years
at 3:00 AM tomorrow
at 3:00 AM 08/01/2023
at 16:00 2023-12-30
在一分钟之后向指定文件中追加 hello world。at -l 查看待执行的 at 任务。
使用管道符将要执行的内容传递给 at。在三天之后执行
删除还未执行的任务
# 首先获取到其 id
at -l # 或 atq
# 然后根据 id 删除该任务
at -d [id] # 或 atrm [id]