弄个linux系统计划任务让你感受一下删库跑路

弄个linux系统计划任务让你感受一下删库跑路

此文章(二十、计划任务)收录在RHCSA专栏:戏说 RHCSA 认证

另有RHCE专栏:戏说 RHCE 认证

亦有RHCA专栏:RHCA 回忆录

说到计划任务,金鱼哥想到的就是,曾经报道的新闻:写好计划任务之后删库跑路‍♂️。也反馈出权限管理的不严谨,其实,就算严谨,往往被攻破的众多事件中,都是内部先被攻破,日防夜防,家贼难防的道理而已☠。
除了这个,还有就是挖矿,在运维生涯中,总共处理过4单挖矿,其中2单都植入了计划任务,然后别人就可以对你的机器进行重复xie渎,试问,如果没掌握好计划任务,又怎么能处理好这故障呢?

来吧,好好学习,天天进步(●’◡’●)

文章目录

    • 弄个linux系统计划任务让你感受一下删库跑路
      • 20.1 一次性任务
      • 20.2 周期性计划任务 cron
        • 20.2.1 系统cron计划任务
        • 20.2.2 用户计划任务
    • 总结

通过任务计划,可以让系统自动的按时间或周期性任务执行任务
未来的某时间点执行一次任务

  • at 指定时间点,执行一次性任务

周期性任务

  • cron

20.1 一次性任务

at工具

  • 由包 at 提供

  • 依赖与atd服务,需要启动才能实现at任务

  • at队列存放在/var/spool/at目录中

  • 执行任务时PATH变量的值和当前定义任务的用户身份一致

at 命令:

at [option] TIME

常用选项:

-V 显示版本信息
-t time 时间格式 [[CC]YY]MMDDhhmm[.ss]
-l 列出指定队列中等待运行的作业;相当于atq
-d N 删除指定的N号作业;相当于atrm
-c N 查看具体作业N号任务
-f file 指定的文件中读取任务
-m 当任务被完成之后,将给用户发送邮件,即使没有标准输出

注意:

  • 作业执行命令的结果中的标准输出和错误以执行任务的用户身份发邮件通知给 root
  • 默认RHEL 8 最小化安装没有安装邮件服务,需要自行安装

范例:

[root@servera ~]# yum -y install postfix
[root@servera ~]# systemctl enable --now postfix.service
[root@servera ~]# yum -y install mailx

TIME:定义出什么时候进行 at 这项任务的时间

HH:MM [YYYY-mm-dd]
noon, midnight, teatime(4pm)
tomorrow
now+#{minutes,hours,days, OR weeks}

范例:at 时间格式

HH:MM 在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
02:00
HH:MM YYYY-MM-DD 规定在某年某月的某一天的特殊时刻进行该项任务
02:00 2016-09-20
HH:MM[am|pm] [Month] [Date]
06pm March 17
17:20 tomorrow
HH:MM[am|pm] + number [minutes|hours|days|weeks], 在某个时间点再加几个时间后才进行该
项任务
now + 5 min
02pm + 3 days

at 任务执行方式:

  • 交互式
  • 输入重定向
  • at -f file

/etc/at.{allow,deny} 控制用户是否能执行at任务

  • 白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令
  • 黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用
    者则可执行
  • 如果两个文件都不存在,只有 root 可以执行 at 命令

范例:rhel中 at任务的存放路径

[root@serverb at]# cd /var/spool/at/spool/at

20.2 周期性计划任务 cron

周期性任务计划cron相关的程序包:

  • cronie:主程序包,提供crond守护进程及相关辅助工具
  • crontabs:包含CentOS提供系统维护任务
  • cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如:cronie中的任务在过去
    该运行的时间点未能正常运行,则anacron会随后启动一次此任务

cron 依赖于crond服务,确保crond守护处于运行状态:

#rhel 7 以后的版本:
systemctl status crond

cron任务分为:

  • 系统cron任务:系统维护作业,/etc/crontab 主配置文件, /etc/cron.d/ 子配置文件
  • 用户cron任务:保存在 /var/spool/cron/USERNAME,利用 crontab 命令管理

计划任务日志:/var/log/cron


20.2.1 系统cron计划任务

/etc/crontab 格式说明,详情参见 man 5 crontab

注释行以 # 开头

[root@servera ~]#cat /etc/crontab
计划任务时间表示法:
范例:
crond任务相关文件:
SHELL=/bin/bash #默认的SHELL类型
PATH=/sbin:/bin:/usr/sbin:/usr/bin #默认的PATH变量值,可修改为其它路径
MAILTO=root #默认标准输出和错误发邮件给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

计划任务时间表示法:

(1) 特定值
给定时间点有效取值范围内的值
(2) *
给定时间点上有效取值范围内的所有值
表示“每...”
(3) 离散取值
#,#,#
(4) 连续取值
#-#
(5) 在指定时间范围上,定义步长
/#: #即为步长
(6) 特定关健字
@yearly 0 0 1 1 *
@annually 0 0 1 1 *
@monthly 0 0 1 * *
@weekly 0 0 * * 0
@daily 0 0 * * *
@hourly 0 * * * *
@reboot Run once after reboot

范例:

#晚上9点10分运行echo命令
10 21 * * * root /bin/echo "Howdy!"
#每3小时echo和wall命令
0 */3 * * * root /bin/echo “howdy”; wall “welcome to servera!”

crond任务相关文件:

/etc/crontab 		配置文件
/etc/cron.d/ 		配置文件
/etc/cron.hourly/ 	脚本
/etc/cron.daily/ 	脚本
/etc/cron.weekly/ 	脚本
/etc/cron.monthly/ 	脚本

注意:这些路径,往往最容易被忽略,就让“病毒”有了可乘之机。所以排查记得查上述的路径文件。


20.2.2 用户计划任务

crontab命令:

  • 每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME

  • 默认标准输出和错误会被发邮件给对应的用户,如:user创建的任务就发送至user的邮箱

  • root能够修改其它用户的作业

  • 用户的cron 中默认 PATH=/usr/bin:/bin,如果使用其它路径,在任务文件的第一行加PATH=/path或
    者加入到计划任务执行的脚本中

crontab命令格式:

crontab [-u user] [-l | -r | -e] [-i]

常用选项:

-l 		列出所有任务
-e 		编辑任务
-r 		移除所有任务
-i 		同-r一同使用,以交互式模式移除指定任务
-u user 仅root可运行,指定用户管理cron任务

控制用户执行计划任务:

/etc/cron.{allow,deny}

范例:每个月日期和星期几字段的关系

[root@servera ~]#man 5 crontab
Note: The day of a command's execution can be specified in the following two
fields — 'day of month', and 'day of week'. If both fields are restricted
(i.e., do not contain the "*" character), the command will be run when either
field matches the current time. For example, "30 4 1,15 * 5" would cause a
command to be run at 4:30 am on the 1st and 15th of each month, plus every
Friday.

范例:修改默认的cron的文本编辑工具

[root@servera ~]# export EDITOR=vim

[root@servera ~]# vim /etc/profile.d/env.sh
export EDITOR=vim

范例:PATH变量

#方法1,在计划任务配置中指定PATH
[root@servera ~]#crontab -l
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
* * * * * useradd hehe;echo $PATH
#方法2,在脚本中指定PATH变量
[root@servera ~]#crontab -l
* * * * * /data/test.sh
[root@servera ~]#cat /data/test.sh
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
useradd hehe
echo $PATH

注意:运行结果的标准输出和错误以邮件通知给相关用户
(1) COMMAND > /dev/null
(2) COMMAND &> /dev/null
cron任务中不建议使用%,它有特殊用途,它表示换行的特殊意义,且第一个%后的所有字符串会被将
成当作命令的标准输入
如果在命令中要使用%,则需要用 \ 转义
注意:将%放置于单引号中是不支持的

范例:

30 2 * * * /bin/cp -a /etc/ /data/etc`date +\%F_\%T`
30 2 * * * /bin/cp -a /etc/ /data/etc`date +‘%F_%T’` 有问题

11月每天的6-12点之间每隔2小时执行/app/bin/test.sh

[root@centos8 ~]#crontab -l
0 6-12/2 * 11 * /app/bin/test.sh

总结

好好学,好好找工作,运维10K+只是起步,找不到10K+都别说是金鱼哥带出来的学生。

弄个linux系统计划任务让你感受一下删库跑路_第1张图片

以上就是【金鱼哥】对 系统计划任务 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。

如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点,如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】!

弄个linux系统计划任务让你感受一下删库跑路_第2张图片

你可能感兴趣的:(戏说,RHCSA,认证,运维基本功,运维,linux,服务器,RHCSA,计划任务crontab)