shell脚本–设置定期自动备份日志文件

 

Hlroliu

每周五23:50自动备份/var/log下的所有日志文件到/root/Backup目录下 ,并以日期命名;

#vim backup.sh
[ -d /root/Backup ] && echo “Backup is ready” || mkdir /root/Backup > /dev/null

#先判断备份文件保存目录是否存在,不存在则创建
tar -czfP /root/Backup/log-`date +%Y%m%d`.tar.gz /var/log

## tar默认为相对路径,可以使用-P参数使用绝对路径
##保存并退出脚本,编写计划任务,以下命令在系统命令界面设置

#chmod +x /root/backup.sh #添加可执行权限
#crontab -e
30 23 * * 5 /root/backup.sh
每天备份前一天的日志,保留30天日志并定期清理30天前的备份日志

vim logbak.sh
#!/bin/bash
#获取备份的前一天时间
DAY=`TZ=”TAIST+16″ date +%Y-%m-%d`
#备份前一天的日志文件
tar cvf /u01/mics/log_archive/$DAY.tar /u01/mics/log/$DAY /u01/mics/log/*.log
gzip -r /u01/mics/log_archive/$DAY.tar
#清除备份目录下30天前的备份文件
find /u01/mics/log_archive/ -mtime +30 -exec rm -rf {} \;

#设定计划任务。每天00:30备份昨天的日志
crontab -e
30 00 * * * sh /u01/mics/baklog
————————————————
版权声明:本文为CSDN博主「Hlroliu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Hlroliu/article/details/102751788

Linux 定时执行shell 脚本

crontab 可以在指定的时间执行一个shell脚本以及执行一系列 Linux 命令。

定时执行shell 脚本
简单给出执行 shell 脚本的步骤。

首先是编写一个测试脚本–test.sh

# 创建脚本
$ vim test.sh
# 在脚本中做写入文件操作
date >> data.txt
修改脚本的权限,确保脚本有执行的权限

chmod 777 test.sh
设置 crontab 定时任务

# 打开定时任务配置文件
crontab -e
# 在配置文件中写入定时任务的操作, 这里就是指定每天12点定时执行脚本,并把执行脚本的日志写入文件 test.log
0 12 * * * sh test.sh > test.log
保存退出,也就是 :wq

如果有错,linux 会在执行的时候发送一份邮件给你

cat /var/spool/mail/root
注意:

crontab 是运行在系统默认环境里,如果运行的脚本是执行 python 代码,即脚本的内容可能是:

python test.py
这里的 python 会是系统默认的 python 版本,而如果你是运行在 conda 环境里,那么这里就需要采用当前环境里 python 版本的执行文件的绝对路径,即先用以下命令查找当前 python 版本的执行文件位置:

$ which python
# 假设输出的文件位置为:
/root/anaconda3/py3/bin/python
这里输出的路径,直接替换脚本里的 python:

/root/anaconda3/py3/bin/python test.py
这样才能保证运行不出错,否则可能因为版本问题出错;

crontab命令详解
常用命令
crontab –e //修改 crontab 文件,如果文件不存在会自动创建。
crontab –l //显示 crontab 文件。
crontab -r //删除 crontab 文件。
crontab -ir //删除 crontab 文件前提醒用户。

service crond status //查看crontab服务状态
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
所以如果需要取消某个定时任务,就是可以删除在配置文件中的对应命令,即 crontab -e 打开文件,然后删除对应哪行的命令即可

基本格式
*  *  *  *  *  command
分 时  日  月  周  命令
第1列表示分钟 00~59 每分钟用*或者 */1表示

第2列表示小时 00~23(0表示0点)

第3列表示日期 01~31

第4列表示月份 01~12

第5列标识号星期 0~6(0表示星期天)

第6列要运行的命令

此外每一列除了数字,还可以有这些符号,其含义如下所示:

* 代表任何时间,比如第一个 * 就代表一小时中的每分钟都执行
, 代表不连续的时间,比如 0 8,12,16 * * * 代表每天8,12,16点0分执行
– 代表连续的时间范围,比如0 5 * * 1-6 代表在周一到周六凌晨5点0分执行
*/n 代表每个多久执行一次,比如*/10 * * * *代表每隔10分钟执行一次
示例
1、在 凌晨00:10运行

10 0 * * * sh test.sh
2、每个工作日23:59都进行备份作业。

59 23 * * 1,2,3,4,5 sh test.sh
或者
59 23 * * 1-5 sh test.sh
3、每分钟运行一次命令

*/1 * * * * sh test.sh
4、每个月的1号 14:10 运行

10 14 1 * * sh test.sh
5、每10分钟定时请求一个地址

0 */10 * * * /usr/bin/curl http://www.aaa.com/index.php
注意,一般最好不要同时采用几号和每周几,可能会出现混淆;

正确、错误日志的输出是否写入到文件方法

1.不输出任何内容(建议使用方法一)

*/1 * * * * /root/XXXX.sh >/dev/null 2>&1

*/1 * * * * /root/XXXX.sh &>/dev/null //&表示任何内容
2.将正确和错误日志都输出到 /tmp/load.log

*/1 * * * * /root/XXXX.sh > /tmp/load.log 2>&1
3.只输出正确日志到 /tmp/load.log

*/1 * * * * /root/XXXX.sh > /tmp/load.log

*/1 * * * * /root/XXXX.sh 1> /tmp/load.log //1可以省略
4.只输出错误日志到 /tmp/load.log

*/1 * * * * /root/XXXX.sh 2> /tmp/load.log
部分解释:

/dev/null 代表空设备文件
> 代表重定向到哪里
1 表示stdout标准输出,系统默认值是1,所以”>/dev/null”等同于”1>/dev/null”
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1

from:https://blog.csdn.net/xiaochuige/article/details/49252741

配置文件的一些例子:
0 3 * * * /root/test.sh 每天凌晨3点执行test.sh文件
* 23-7/1 * * * /root/lnmp restart 晚上11点到早上7点之间,每隔一小时重启lnmp套件
*/30 * * * * /usr/sbin/ntpdate 每半小时同步一下时间
0 23 * * 6 /lnmp restart 每星期六的11 : 00 pm重启重启lnmp套件。
*/1 * * * * echo “i am running.”>>/tmp/running.txt 每隔1分钟向/tmp/running.txt写一个”i am running.”字符串。
运行
我以为编辑crontab保存后会自动执行,其实不然,必须通过重启cron才可以,命令如下:
启动/etc/init.d/cron start
关闭/etc/init.d/cron stop
重启/etc/init.d/cron restart

————————————————

linux自动备份文件 并上传到远程服务器 脚本实现

      mkdir -p /backup/bakdata  #新建数据备份目录
(2)完成备份脚本操作
新建脚本文件
vi bakdata.sh
添加以下内容:

#!/bin/sh
dateTime=`date +%Y_%m_%d`    #当前系统时间
days=7    #删除7天前的备份数据s
orowner=bakuser   # 备份到此用户下
bakdescdir=/DATA/bakmdata     #备份文件到该路径
bakdata=$orowner”_”$dateTime.tar.gz   #备份文件名
baklog=$orowner”_”$dateTime.log    #备份日志
baksrcdir=/DATA/www/moodledata   #需要备份的文件
remotePath=/DATA/moodle/bakmooldedata   #远程服务器的路径

cd $bakdescdir    #进入备份目录
mkdir -p $orowner   #按需要备份的用户创建目录
cd $orowner   #进入目录
echo “backup start at $dateTime” > $baklog
echo “————————–” >>$baklog
tar -zcvf $bakdata $baksrcdir $baklog    #压缩备份文件和日志文件

find $bakdescdir/$orowner -type f -name “*.log” -exec rm {} \;   #删除日志文件
find $bakdescdir/$orowner -type f -name “*.tar.gz” -mtime +$days -exec  rm -rf {} \;#删除7天前的备份(注意:{} \中间有空格)
scp  $bakdescdir/$orowner/$bakdata 10.6.108.79:$remotePath  #上传到远程服务器
(3)添加脚本执行权限
chmod +x /backup/oracledata/ordatabak.sh

  #添加脚本执行权限
(4)编辑系统任务执行计划
crontab -e
输入一下信息“:00 01 * * * /DATA/bakdata/bakdata.sh#每天凌晨1点,以oracle用户执行ordatabak.sh备份文件:wq! #保存退出

重启crontab

service crond restart

从此每天的凌晨1点 系统会自动完成数据库的备份,压缩,并上传到远程服务器的指定路径下