备份日志-Linux中的定时任务crontab || rm+cp+mv三基详解(解释\cp)|| Vim编辑器

 在Linux中,可以使用crontbab指定定时任务。

1、如何写crontab

        crontab中每一行代表一个任务,每个任务由周期和任务名组成。如下形式   


59 23 10 5 2014 /home/root/tesh.sh
#分 时 日 月  年    |<-------命令串------->|
        表示2014年5月10日23点59分,执行/home/root下的tesh.sh脚本。
        时间周期中可以使用一些辅助字符,如:

        *    表示任何时刻都可以

        ,  若有多个时刻,用逗号分隔

        -     表示一个时刻到另一时刻之间的时间段

        /n   表示每过n个时间单位

        比如,*/10 3-6 10,11 * * /home/root/tesh.sh 就表示 每年每月的10号和11号,3点到6点之间,每过10分钟执行一次tesh.sh

2、crontab注释

        在crontab中,#代表了注释,注释的存在,能够简化crontab的一些复杂操作。

        比如,如果有一个任务test.sh,每天都需要执行,每过10分钟执行一次,我们可以写成 */10 * * * * tesh.sh。现在有新要求,每天1点到1点10分不能执行,其余时间照旧。

        一种写法就是:将它拆成多条crontab,比如每天2点到0点执行,每天0点到1点执行,每天1点10分到2点执行。三条语句。这种方法的问题就是,如果再来新的要求呢,比如在此基础之上,每天8点到8点10分不能执行,这又怎么处理,写更多的crontab任务吗?

        另一种比较好的解决方案是:写一个run.sh脚本,每10分钟执行一次,首先判断当前时间是否是在1点到1点10分之间,如果不是,就执行tesh.sh,如果是,可以sleep10分钟。

        第三种非常好的方案就是利用注释。我们可以在1点时,将tesh.sh任务给注释掉,在1点10分,将tesh.sh任务的注释消除。要实现这种想法,需要使用sed命令。可以在crontab里面这样写:


#每隔10分钟执行一次
*/10 * * * * tesh.sh

#每天1点钟,将命令注释掉
0 1 * * * sudo sed -i 's\%\(\*\/10 \* \* \* \* tesh.sh\)\%#\1\%' /var/spool/cron/用户名

#每天1点零10分,将被注释的命令恢复
10 1 * * * sudo sed -i 's\%\(^##*\)\(\*\/10 \* \* \* \* tesh.sh\)\%\2\%' /var/spool/cron/用户名

       sed -i表示直接修改文件内容,之后的动作必须用单引号括上,单引号之后的是文件。单引号内部s表示替换,s之后的%是分隔符,代替默认的/分隔符,括弧表示将括号里面的内容保存下来,标记为1,#表示把注释扩展到下一个换行符以前,\1表示选取括号中的内容。
        这里出现了众多的反斜杠,都是用来做转义的,否则会被解析。

        其中%前面的反斜杠是用来转义crontab的,crontab中会将%解析成换行符。括弧和*前的反斜杠是因为sed会解析它们。

        如果不是在crontab中,这个命令可以写成 sed -i 's%\*\/10\*\*\*\*tesh.sh\*\/10\*\*\*\*tesh.sh%#\1%'  file

3、crontab的调试方式

        如果crontab不执行,我们可以使用 sudo vim /var/spool/mail/用户名查看系统发给用户的mail,可以通过时间点,来找出执行失败的原因。

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

萌新在实验楼学习Linux做实验的时候遇到的,有点小小的麻烦,所以记录下过程

任务
小明是一个服务器管理员,他需要每天备份论坛数据(这里我们用 alternatives.log 日志替代),备份当天的日志并删除之前的日志。而且备份之后文件名是 年-月-日 的格式。alternatives.log 在 /var/log/ 下面。

目标
为 shiyanlou 用户添加计划任务
每天凌晨 3 点的时候定时备份 alternatives.log 到 /home/shiyanlou/tmp/ 目录
命名格式为 年-月-日,比如今天是2017年4月1日,那么文件名为 2017-04-01


任务分解
这个任务分两步

第一步是先将 /home/shiyanlou/tmp/ 目录下的alternatives.log日志备份到 /home/var/log/ 目录

第二步是将原来存放日志 /home/shiyanlou/tmp/ 目录下的所有日志删除

开始准备
实验楼的虚拟主机环境和真实环境不一样,所以要先安装并启动rsyslog

$sudo apt-get install -y rsyslog
$sudo service rsyslog start

安装完成后启动crontab

$sudo cron -f &

进入crontab创建

$crontab -e

第一次启动时,会让选择用那个方式编辑,萌新2,3都可以使用的

这里了,先简单的介绍下 crontab命令格式

通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script 脚本。时间间隔的单位可以是分钟、小时、日、月、周的任意组合。

这里我们看一看crontab 的格式,下图中从左到右分别时min,hour,day,month,day of week

每个字段的输入都有限制,并且给出了解释

开始编写
任务第一步,备份日志到指定目录

0  3  * * * cp /home/var/log/alternatives.log /home/shiyanlou/tmp/$(date+\Y%\m%\d%)

解释 :

根据上面的任务目标是凌晨3点

第一位,min为0

第二位,的hour我们填写3

第三位,用 * 代表任意天数

第四位,用 * 代表任意月数

第五位,用 * 代表一周的任意天数

cp /home/var/log/alternatives.log /home/shiyanlou/tmp/$(date+\Y%\m%\d%)

任务提示要选用当前的时间名字作为备份后的日志名称

当前时间是一个变量所以,用$,%在这里代表结束符,所以要用 \ 转义,后面给出日期的格式

 “ % ” 在 crontab 文件中,有结束命令行、换行、重定向的作用,前面加 ” \ ” 符号转义,否则,“ % ” 符号将执行其结束命令行或者换行的作用,并且其后的内容会被做为标准输入发送给前面的命令

任务第二步,删除原日志保存目录

cp /home/var/log/alternatives.log /home/shiyanlou/tmp/$(date+\Y%\m%\d%) || rm /home/var/log/*.log

因为是两个命令,所以用 || 管道符隔开,|| 意思是如果前面的命令可以执行,则执行后面的命令

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

最近用到三个rm+cp+mv基本命令,总是有一定的问题所以就总结一下。其实每一个命令都可以用man +命令来查看帮助

第一个命令:cp命令
作用:将一个或多个源文件或者目录复制到指定的目的文件或目录。cp还支持同时复制多个文件,当一次复制多个文件是,目标文件参数必须是一个已经存在的目录,否则将出现错误。

参数如下:

实例:

复制file到tmp并改名

cp file /tmp/file1

将目录/usr/下所有文件及其子目录复制到目录/user/file中

cp -r /usr/ /user/file

一般每次复制过程,若有一些同名文件都会有提示,需要不停按y来确定,这是~/.bashrc下面的alias的别名在作祟,最简单的方式就是在前面

\cp,前面反斜杠就是让cp按照原始的来解析。

第二个 mv
mv命令用来对文件或者目录重新命令,或者将文件从一个目录移动到另一个目录中。
源文件备移至一个目标目中,有两种结果。
1,如果目标文件世道某一个目录文件的路径,源文件会被移动到目录下,切文件名不变。
2,如果目标文件不是目录文件,则会覆盖已存在的同名文件。

实例:
改名
mv file1 file2
把所有文件移动到当前目录
mv /usr/* .

第三个 rm
rm 命令可以删除一个项目中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其目录均删除掉
注:
rm删除文件无法恢复
参数如下


如果不想出现询问直接删除可以用\rm恢复原始
如:
\rm 1.txt

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

Vim:按i插入然后就可以编写了,按ESC退出插入编写,按:x 就会保存退出! 
--------------------- 
作者:乐小树 
来源:CSDN 
原文:https://blog.csdn.net/ckkboy/article/details/60957645 
作者:噢_乖 
来源:CSDN 
原文:https://blog.csdn.net/sevensolo/article/details/86614855 
作者:舒夜无痕 
来源:CSDN 
原文:https://blog.csdn.net/szchtx/article/details/21704321 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值