linux中的计划任务

什么是计划任务

按照计划准时准点去执行任务 --》 计划任务

例:闹钟:早上八点叫我起床

游戏服务器资源分析:

img

img

为什么需要计划任务

计划任务: 是必须的吗? --》可以不需要,靠人工解决
优势: 解放人力,提升效率,自动化执行
定时定点去执行脚本(程序)

提出问题:

​ 计划任务存放在哪里?
​ 计划任务的进程是否启动?
​ 任何一个用户是否都可以创建计划任务
​ 用户不登陆系统,计划任务是否会执行?不需要登录

​ 黑客添加了计划任务自动执行木马程序,如何找出来?

img

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

-l
[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

419 23:00:34 lier systemd[1]: Started Command Scheduler.
419 23:00:34 lier crond[13198]: (CRON) INFO (RANDOM_DELAY will be sc...)
419 23:00:34 lier crond[13198]: (CRON) INFO (running with inotify su...)
419 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)

419 23:00:34 lier systemd[1]: Started Command Scheduler.
419 23:00:34 lier crond[13198]: (CRON) INFO (RANDOM_DELAY will be sc...)
419 23:00:34 lier crond[13198]: (CRON) INFO (running with inotify su...)
419 23:00:34 lier crond[13198]: (CRON) INFO (@reboot jobs will be ru...)
420 17:05:38 lier systemd[1]: Stopping Command Scheduler...
420 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里的命令
Logo

更多推荐