我们的 linux 系统,有时会自动进行线上更新,会定时升级locate用到的数据库。用户也会“在每天0点备份数据”或者“每天8点分析登录文件”,管理这些例行任务就叫做“工作调度”
atd 服务和 at 工作调度
atd 服务控制仅执行一次的调度。at 命令用来编辑这些任务。首先确认是否打开 atd 服务,没有就打开。
systemctl status atd
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2023-02-12 09:40:29 CST; 7h ago
Main PID: 1253 (atd)
CGroup: /system.slice/atd.service
└─1253 /usr/sbin/atd -f
systemctl restart atd # 启动服务
at 指令用于增删改查任务列表,这个列表实际上以文本储存在/var/spool/at
里。
at [-ldc] 时间
-l: list列出当前工作调度,相当于 atq
-c: 可以列出后面接的该项工作的实际指令内容。
-d: 取消一个在 at 调度中的工作,相当于 atrm
时间上,既可以指定绝对时间(HH:MM),也可以指定基于 now 的相对时间。root 可以设定每个人的任务,其他用户只能设定自己的任务。
at now + 1 minutes
at> echo imhere
atq # 查询
3 Sun Feb 12 17:39:00 2023 a lighthouse
at -c 3 # 查询3号任务的指令
...
# 其中有一行就是我们输入的指令
当预定的时间抵达,at 会打开新 shell 执行指令。
crond 服务和 crontab 工作调度
crond 服务控制仅执行一次的调度。crontab 命令用来编辑这些任务。任务列表纪录到/var/spool/cron/
里,而运行记录在/var/log/cron
里。
crontab [-ler]
-l: 查询列表
-e: 编辑列表
-r: 清空列表
如果开始编辑,就会进入 vim 编辑工作,可以输入多行任务,每行任务如下:
分钟 小时 日期 月 (星期)指令 # 日月和星期是二选一
30 12 5 5 echo imhere # 5月5日12:30
30 12 5 * echo imhere # 美月5日12:30
30 12,18 5 5 echo imhere # 5月5日12:30和18:30
/30 12 5 5 echo imhere # 5月5日12每三十分钟
除此之外,/etc/crontab
里保存的是独立于用户外的系统性调度。无需用crontab
,直接用 vim 打开,用相同语法编辑就可以。
vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# 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
*/5 * * * * root flock -xn "/var/log/oneav/cron.lock" -c '/opt/threatbook/OneAV/oneav/script/install/oneav_service_monitor.sh'
系统的设置除了时间和指令外,还多了一个用户(代表由哪个用户身份执行)
标签:atd,12,30,调度,crontab,例行,任务,linux From: https://www.cnblogs.com/ofnoname/p/17114716.html