按照计划准时准点去执行任务 --》 计划任务
例:闹钟:早上八点叫我起床
游戏服务器资源分析:
计划任务: 是必须的吗? --》可以不需要,靠人工解决
优势: 解放人力,提升效率,自动化执行
定时定点去执行脚本(程序)
计划任务存放在哪里?
计划任务的进程是否启动?
任何一个用户是否都可以创建计划任务
用户不登陆系统,计划任务是否会执行?不需要登录
黑客添加了计划任务自动执行木马程序,如何找出来?
crond进程:负责linux里执行计划任务的程序,它是一直在运行的
每隔一分钟会检查下是否有任务执行。
使用crontab命令调用crond进程,设置按固定的周期(如每天,每周)重复执行预先计划好的任务。
计划任务: 定时去做某件事情 --》闹钟
-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]#
方法一: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
直接将计划任务删除也可以取消
直接查看相应的文件夹是否有执行计划任务中的命令
通过tail -f /var/log/cron动态监控是否执行了计划任务
如何编写一个脚本每隔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里的命令