- linux中的计划任务
- 什么是计划任务
- 为什么需要计划任务
- 提出问题:
- crond进程
- crontab创建计划任务
- -e
- -l
- 查看是否有crond进程
- 存放计划任务的目录
- 取消计划任务
- 如何知道crond是否帮助我们去执行了计划任务
- 直接去文件夹里查看
- 查看日志 /var/log/cron
- 监控crond进程是否启动,如果没启动则启动
- 黑客添加了计划任务自动执行木马程序,如何找出来?
按照计划准时准点去执行任务 --》 计划任务
例:闹钟:早上八点叫我起床
游戏服务器资源分析:
为什么需要计划任务计划任务: 是必须的吗? --》可以不需要,靠人工解决
优势: 解放人力,提升效率,自动化执行
定时定点去执行脚本(程序)
计划任务存放在哪里?
计划任务的进程是否启动?
任何一个用户是否都可以创建计划任务
用户不登陆系统,计划任务是否会执行?不需要登录
黑客添加了计划任务自动执行木马程序,如何找出来?
crond进程crond进程:负责linux里执行计划任务的程序,它是一直在运行的
每隔一分钟会检查下是否有任务执行。
使用crontab命令调用crond进程,设置按固定的周期(如每天,每周)重复执行预先计划好的任务。
crontab创建计划任务计划任务: 定时去做某件事情 --》闹钟
-e-e 编辑 edit
[root@master 417]# crontab -e 创建计划任务的命令 30 3 * * * bash /lianxi/417/backup_log.sh 每天凌晨3:30执行脚本backup_log.sh [root@master 417]# crontab -l 查看计划任务 list 30 3 * * * bash /lianxi/417/backup_log.sh [root@master 417]#
默认只能精确到分钟,最短时间间隔是1分钟
[root@master 417]# cat /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
20 8 23 7 * bash /lianxi/417/backup_log.sh 7月23日的早上8点20 执行脚本
/ 频率,间隔多久
, 单个的
-连续的
*/1 * * * * 每分钟去执行
*/5 * * * * 每5分钟去执行
30 8 3,8,10 * * 3号,8号,10号的8点30
30 8 8-18 * * 8号到18号的8点30
30 8-18 * * * 8点30 9点30 … 18点30
[root@master 417]# crontab -l 30 3 * * * bash /lianxi/417/backup_log.sh */1 * * * * mkdir /tmp/sc$RANDOM [root@master 417]#查看是否有crond进程
方法一:service crond status
查看crond进程的状态
Active: active (running)表示进程正在运行
Active: inactive (dead)表示进程被杀死
[root@lier tmp]# service crond status
Redirecting to /bin/systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since 二 2022-04-19 23:00:34 CST; 18h ago
Main PID: 13198 (crond)
CGroup: /system.slice/crond.service
└─13198 /usr/sbin/crond -n
4月 19 23:00:34 lier systemd[1]: Started Command Scheduler.
4月 19 23:00:34 lier crond[13198]: (CRON) INFO (RANDOM_DELAY will be sc...)
4月 19 23:00:34 lier crond[13198]: (CRON) INFO (running with inotify su...)
4月 19 23:00:34 lier crond[13198]: (CRON) INFO (@reboot jobs will be ru...)
Hint: Some lines were ellipsized, use -l to show in full.
service crond stop可以关闭crond进程
service crond start可以打开crond进程
[root@lier tmp]# service crond stop Redirecting to /bin/systemctl stop crond.service [root@lier tmp]# service crond status Redirecting to /bin/systemctl status crond.service ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: inactive (dead) since 三 2022-04-20 17:05:38 CST; 14s ago Process: 13198 ExecStart=/usr/sbin/crond -n $CRONDARGS (code=exited, status=0/SUCCESS) Main PID: 13198 (code=exited, status=0/SUCCESS) 4月 19 23:00:34 lier systemd[1]: Started Command Scheduler. 4月 19 23:00:34 lier crond[13198]: (CRON) INFO (RANDOM_DELAY will be sc...) 4月 19 23:00:34 lier crond[13198]: (CRON) INFO (running with inotify su...) 4月 19 23:00:34 lier crond[13198]: (CRON) INFO (@reboot jobs will be ru...) 4月 20 17:05:38 lier systemd[1]: Stopping Command Scheduler... 4月 20 17:05:38 lier systemd[1]: Stopped Command Scheduler. Hint: Some lines were ellipsized, use -l to show in full.
方法二:ps aux|grep crond
查看进程
[root@lier tmp]# ps aux |grep crond root 23683 0.9 0.0 126388 1684 ? Ss 17:12 0:00 /usr/sbin/crond -n root 23741 0.0 0.0 112824 988 pts/0 S+ 17:13 0:00 grep --color=auto crond
当过滤出crond进程的结果大于等于两行时说明有crond进程
[root@lier tmp]# ps aux |grep crond root 23683 0.2 0.0 126388 1684 ? Ss 17:12 0:00 /usr/sbincrond -n root 23907 0.0 0.0 112824 984 pts/0 S+ 17:16 0:00 grep --color=auto crond [root@lier tmp]# ps aux |grep crond|wc -l 2
[root@lier tmp]# service crond stop Redirecting to /bin/systemctl stop crond.service [root@lier tmp]# ps aux |grep crond root 23958 0.0 0.0 112824 988 pts/0 S+ 17:17 0:00 grep --color=auto crond [root@lier tmp]# ps aux |grep crond|wc -l 1存放计划任务的目录
/var/spool/cron
每个用户都有一个对应的文件存放这个用户的计划任务
[root@lier tmp]# cd /var/spool/cron [root@lier cron]# ls root [root@lier cron]# cat root 30 3 * * * bash /lianxi/tar/backup_log.sh 30 4 * * 3,5,7 bash /lianxi/backup.sh
新建一个用户创建计划任务
[root@master cron]# useradd liuchang [root@master cron]# su - liuchang [liuchang@master ~]$ pwd /home/liuchang [liuchang@master ~]$ ls [liuchang@master ~]$ crontab -e no crontab for liuchang - using an empty one crontab: installing new crontab [liuchang@master ~]$ crontab -l */1 * * * * mkdir ~/sc$RANDOM
普通用户不能查看计划任务目录/var/spool/cron,只能使用命令crontab -l查看自己的计划任务
[liuchang@master ~]$ cd /var/spool/cron/ -bash: cd: /var/spool/cron/: 权限不够 [liuchang@master ~]$ exit 登出 [root@master cron]# pwd /var/spool/cron [root@master cron]# ls liuchang root [root@master cron]# [root@master cron]# cat liuchang */1 * * * * mkdir ~/sc$RANDOM
用户不登录系统,计划任务也会执行
取消计划任务将计划任务注释掉(推荐)
[root@master cron]# vim liuchang [root@master cron]# cat liuchang #*/1 * * * * mkdir ~/sc$RANDOM [root@master cron]# [root@master cron]# crontab -l -u liuchang #*/1 * * * * mkdir ~/sc$RANDOM
直接将计划任务删除也可以取消
如何知道crond是否帮助我们去执行了计划任务 直接去文件夹里查看直接查看相应的文件夹是否有执行计划任务中的命令
查看日志 /var/log/cron通过tail -f /var/log/cron动态监控是否执行了计划任务
监控crond进程是否启动,如果没启动则启动如何编写一个脚本每隔1秒钟执行一次,去检测crond进程是否存在,如果不存在在,在屏幕输出crond is down?
[root@master 419]# vim monitor_crond.sh
[root@master 419]# cat monitor_crond.sh
#!/bin/bash
while true
do
if service crond status &>/dev/null ;then
echo "crond is up"
else
echo "crond is down"
service crond start && echo "now crond is up"
fi
sleep 1
done
[root@master 419]#
执行脚本,再另起一个终端停止crond进程,观察屏幕输出变化
[root@lier 419]# bash monitor_crond.sh crond is up crond is up crond is up crond is up crond is up crond is down Redirecting to /bin/systemctl start crond.service now crond is up crond is up crond is up crond is up crond is up黑客添加了计划任务自动执行木马程序,如何找出来?
查看计划任务目录(var/spool/cron)中是否有可疑任务计划文件,然后查看root用户本身的计划任务,是否有可疑的脚本执行
查看/var/log/cron 日志
查看黑客是否搭计划任务的顺风车
[root@lier etc]# cd /etc/cron.daily/ [root@lier cron.daily]# ls logrotate man-db.cron mlocate
查看mlocate文件,updatedb --》 locate
/etc/下面的这些文件夹里可以存放linux系统的计划任务
[root@lier etc]# cd /etc/cron. cron.d/ cron.deny cron.monthly/ cron.daily/ cron.hourly/ cron.weekly/
黑客有可能将木马程序放到这些linux自己每天自动执行的计划任务里面去。
cron.daily/ : 每天要执行的计划任务 cron.hourly/ : 存放linux系统每小时需要执行的任务 cron.weekly/: 存放linux系统每周需要执行的计划任务 cron.monthly/ :存放linux系统每月需要执行的计划任务 cron.deny: 存放linux系统拒绝谁执行的计划任务
在/etc/cron.hourly中写一个脚本,每隔一个小时就会执行一次/etc/cron.hourly中的操作
[root@lier cron.hourly]# cat echo.sh while true do echo "hello,world" mkdir /tmp/lzy$RANDOM done
另起一个终端动态监控crond进程
[root@lier cron.hourly]# tail -f /var/log/cron Apr 19 23:00:34 [localhost] crond[13198]: (CRON) INFO (running with inotify support) Apr 19 23:00:34 [localhost] crond[13198]: (CRON) INFO (@reboot jobs will be run at computer's startup.) Apr 19 23:01:01 [localhost] CROND[13319]: (root) CMD (run-parts /etc/cron.hourly) Apr 19 23:01:01 [localhost] run-parts(/etc/cron.hourly)[13319]: starting 0anacron Apr 19 23:01:01 [localhost] run-parts(/etc/cron.hourly)[13328]: finished 0anacron Apr 20 00:01:01 [localhost] CROND[18269]: (root) CMD (run-parts /etc/cron.hourly) Apr 20 00:01:01 [localhost] run-parts(/etc/cron.hourly)[18269]: starting 0anacron Apr 20 00:01:01 [localhost] anacron[18279]: Anacron started on 2022-04-20 Apr 20 00:01:01 [localhost] run-parts(/etc/cron.hourly)[18281]: finished 0anacron Apr 20 00:01:01 [localhost] anacron[18279]: Normal exit (0 jobs run) Apr 20 16:01:01 [localhost] CROND[21290]: (root) CMD (run-parts /etc/cron.hourly) Apr 20 16:01:01 [localhost] run-parts(/etc/cron.hourly)[21290]: starting 0anacron Apr 20 16:01:01 [localhost] anacron[21299]: Anacron started on 2022-04-20 Apr 20 16:01:01 [localhost] anacron[21299]: Will run job `cron.daily' in 29 min. Apr 20 16:01:01 [localhost] anacron[21299]: Jobs will be executed sequentially Apr 20 16:01:01 [localhost] run-parts(/etc/cron.hourly)[21301]: finished 0anacron
tc/cron.hourly)[21290]: starting 0anacron
Apr 20 16:01:01 [localhost] anacron[21299]: Anacron started on 2022-04-20
Apr 20 16:01:01 [localhost] anacron[21299]: Will run job `cron.daily’ in 29 min.
Apr 20 16:01:01 [localhost] anacron[21299]: Jobs will be executed sequentially
Apr 20 16:01:01 [localhost] run-parts(/etc/cron.hourly)[21301]: finished 0anacron
Apr 20 16:01:01 [localhost] CROND[21290]: (root) CMD (run-parts /etc/cron.hourly)表示执行了/etc/cron.hourly里的命令



