Linux crontab 命令

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
定时任务(cronie 软件名称)
crond (服务名称 进程名称)
# crontab -l                       #查看定时任务脚本
 
(1)检查进程: ps -ef 、ps aux(更加详细 cpu 内存使用率)
# ps -ef | grep crond | grep -v grep | wc -l
# ps -aux | grep -c '[c]rond'
(2)检查服务状态
# systemctl is-active crond.service
# systemctl is-enabled crond.service
(3)使用定时任务
  *  *  *  *  *  命令
(分 时 日 月 周)命令
例:
每天早上8:30去上班开车
30 08  * * * CMD
每周日早上9:30去上班开车
30 09 * * * 0 CMD
每天晚上12点准时回家开车
00 00 * * * CMD
*  00 * * * CMD
 
(4)定时任务常见特殊符号
* :每
/ :隔                               #*/10  *       * * * CMD  (每隔10分钟=每10分钟)
- :范围                             #*  08-21      * * * CMD
,:                                 #00 08,09,10 *  * 1-5 CMD
例如:
  *     *  *  *  *  命令             #每分钟
  */1   *  *  *  *  命令             #每隔1分钟
  01    *  *  *  *  命令             #每小时的第一分钟
例如:
[root@libin3 ~]# crontab -e
*/1 * * * * date >>/tmp/time.log     #写一个计时任务,date每隔1分钟输出到/tmp/time.log
# tail -f /var/log/cron              #打开一个新窗口查看cron日志的变化
# tail -f /tmp/time.log              #打开一个新窗口查看time.log的变化
 
每天晚上12点打包备份/etc/目录到/tmp下面 (要求每天的压缩包不能重复)
第一步 :命令加脚本
# tar zcvf /tmp/etc.tar.gz  /etc/    #测试打包/etc/的命令
# mkdir -p /libin/scripts/           #创建脚本路径
# vim /libin/scripts/bak.sh          #写脚本
#!/bin/bash
tar zcf /tmp/etc-$(date +%F).tar.gz /etc/
# sh /libin/scripts/bak.sh           #测试脚本是否正确
第二步:写入定时任务  可以先写为每分钟执行
crontab -e
# backup etc dir by /tmp/ at 12
* * * * * sh /libin/scripts/bak.sh
第三步:验证定时任务
# tail -f /var/log/cron              #查看定时任务的变化
# ll  /tmp/etc-                      #查看备份的变化
第四步:修改定时任务为每天晚上12点
00 00 * * * sh /libin/scripts/bak.sh
 
==============================================注意
# date +%Y%m%d_%w                    #带%在定时任务中有特殊含义,否则只会执行三次;建议使用脚本放入定时任务,或加上\
# date +\%Y\%m\%d_\%w
 
关于 出现/var/spool/mail/root提示优化:
1、定时任务 定向到空或追加到文件
>/dev/null 2>&1                                             #定向到空>/dev/nul,或追加到文件 2>&1
>/dev/null 2>&1 == 1>/dev/null  2>/dev/null == &>/dev/null  #1代表正确的信息 2代表错误的信息,同时记录错误或者正确的信息
>>/tmp/message.log 2>&1                                     #追加到文件
 
例如::
*/1 * * * * date >>/tmp/time.log       2>&1                 #追加到文件的,可以定向到文件,可以把错误的信息记录下来
00 00 * * * sh /libin/scripts/bak.sh   >/dev/nul 2>&1       #脚本类或者命令类,可以定向到黑洞
 
特殊字符设备
/dev/null    :黑洞 
/dev/zero    :白洞
/dev/urandom :随机
 
1、关闭邮件服务  没有发出去的临时邮件 存放起来 ll /var/spool/postfix/maildrop/ 积累大量小文件 inode可能用光
2、邮件服务开启   不断收到 you have new mail /var/spool/mail/root
 
定时任务案例2:
1、每分钟显示网卡ip地址(ip或ifconfig)和当前系统时间追加到 /tmp/time.log
(1)# ip a s eth0 | awk 'NR==3' | awk -F"[ /]" '{print $6}'    
(2)# vim /libin/scripts/ip.sh
#!/bin/bash
ip a s eth0 | awk 'NR==3' | awk -F"[ /]" '{print $6}'
(3)# sh /libin/scripts/ip.sh >>/tmp/time.log
(4)# crontab -e
* * * * * sh /libin/scripts/ip.sh >>/tmp/time.log 2>&1       #sh -x /libin/scripts/ip.sh >>/tmp/time.log 2>&1,可以先调式脚本
(5)# tail -f /var/log/cron
(6)# tail -f /tmp/time.log                                   #/libin/scripts/ip.sh:行2: ip: 未找到命令
 注:定时任务中 环境变量问题PATH 在定时任务中 运行脚本 只认识 /usr/bin /bin 这两个路径里面的命令
正确写法: (1)/usr/sbin/ip a s eth0 | awk 'NR==3' | awk -F"[ /]" '{print $6}'
          (2)#!/bin/bash
               . /etc/profile
               ip a s eth0 | awk 'NR==3' | awk -F"[ /]" '{print $6}'
 
# sh -x /libin/scripts/ip.sh                                 #调试脚本,-x:显示脚本的执行过程;带+的是执行的命令和过程,不带+号的是显示到屏幕的内容,+号越多优先执行
定时任务案例3:
(1)每天晚上12点 打包备份 /etc/rc.local /etc/fstab /var/spool/cron 备份到backup
(2)要求备份到/backup/ip地址命名目录中
/backup/192.168.124.134
/backup/192.168.124.134/conf-2022-03-19_周几.tar.gz
(3)删除/backup 7天之前的备份 但是保留每周一的备份
===============#变量名称=变量内容 
[root@libin3 ~]# ip=192.168.124.134
[root@libin3 ~]# echo $ip
[root@libin3 ~]# echo $ip $ip $ip
192.168.124.134 192.168.124.134 192.168.124.134
[root@libin3 ~]#  touch $ip.{01..10}
================#
[root@libin3 ~]# hostname -I
192.168.124.134 192.168.122.1
[root@libin3 ~]# ip=`hostname -I`
[root@libin3 ~]# echo $ip.txt
192.168.124.134 192.168.122.1 .txt
[root@libin3 ~]# ip=`hostname -I | awk '{print $1}'`
[root@libin3 ~]# echo $ip.txt
192.168.124.134.txt
 
第一步:变量与ip时间  变量 一次定义 多次使用
vim /libin//scripts/bak-conf.sh
#!/bin/bash
ip=`hostname -I | awk '{print $1}'`
date=`date +%F_%T`
echo $ip $date
 
第二步:打包备份
mkdir -p /backup/$ip
cd / && \                                                  #\:撬棍,转义,换行
tar zcf /backup/$ip/conf-$date.tar.gz etc/rc.local \          
etc/fstab var/spool/cron etc/hosts etc/profile
 
第三步:删除旧备份,保留每周一备份
 
mkdir /backup/192.168.124.134/
# touch /backup/192.168.124.134/etc-2018-12-23_{1..6}.tar.gz
# find /backup/192.168.124.134/ -type f -name "*.tar.gz" ! -name "*_1.tar.gz"
# find /backup/192.168.124.134/ -type f -name "*.tar.gz" ! -name "*_1.tar.gz" | xargs rm -f     #! -name :取反
================================================
 
crontab定时一下
tar zcvf /文件存放路径/webpage.tar.gz / 页面路径/
mysqldump -uroot -p(p后紧跟密码) 库名字 >/备份存放路径/data.sql
chmod 777 你的脚本
然后crontab -e 每天 凌晨一点备份 里面就写
* 1 * * * /你的脚本路径/backup.sh

  

posted @   LB_运维技术  阅读(86)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示