linux 基础(8)例行任务

我们的 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'

系统的设置除了时间和指令外,还多了一个用户(代表由哪个用户身份执行)

posted @ 2023-02-12 20:56  Ofnoname  阅读(352)  评论(0编辑  收藏  举报