Linux实验6(定时器crontab、邮件mail)

1. 编写一段bash shell程序,保存为 program.sh

完成以下输出:
please,input a number:
5(回车)
5 4 3 2 1
4 3 2 1
3 2 1
2 1
1

  1 #!/bin/bash
  2 echo "please,input a number:"
  3 read n
  4 for((i=0;i<$n;i++));
  5 do
  6         for((j=n-i;j>0;j--));
  7         do
  8                 echo -n "$j "
  9         done
 10         echo
 11 done

2.管理员root每天需要完成以下工作

2.1 每天早上8点30分启动服务器的ftp服务,在每天晚上23点30分就关闭ftp服务。如果启动成功把ftp的进程信息写入 /var/ftp/年-月-日.log 文件中,如果启动失败,需要给root发一封邮件。邮件内容为: start ftp error。

#~/linux-6/startFtp.sh
 1 #!/bin/bash
 2 systemctl start vsftpd
 3 #启动失败
 4 if [ $? != 0 ];then
 5 echo "start ftp error"|mail -s "start ftp error" root
 6 else
 7 #启动成功
 8 #把ftp进程信息写入/var/ftp/年-月-日.log中
 9 #获得进程信息
10 processInfo=`ps -ef | grep vsftpd | head -n1`#在shell脚本执行的时候发现,"grep vsftpd"也会出现在ps的记录中,所以加上head过滤一下
11 #获取年、月、日
12 year=`date -I | cut -d - -f1`
13 month=`date -I | cut -d - -f2`
14 day=`date -I | cut -d - -f3`
15 #写文件
16 echo "${processInfo}" >> /var/ftp/${year}-${month}-${day}.log
17 fi
#~/linux-6/stopFtp.sh
1 #!/bin/bash
2 #关闭ftp服务
3 systemctl stop vsftpd
4 if [ $? != 0 ];then
5         #关闭失败
6         echo "ftp stop error" | mail -s "ftp stop error" root
7 fi      

2.2 在早上8点30分到晚上23点30分之间,每隔1小时ping一下百度域名(每次ping 发4次),保证网络畅通,并把ping的结果追加到 /var/ftp/年-月-日.log 文件中。

#~/linux-6/pingBaidu.sh
 1 #!/bin/bash
 2 #获取年、月、日
 3 year=`date -I | cut -d - -f1`
 4 month=`date -I | cut -d - -f2`
 5 day=`date -I | cut -d - -f3`
 6 #ping 4次百度,写入文件
 7 ping -c4 www.baidu.com >> /var/ftp/${year}-${month}-${day}.log

2.3 每天晚上11点50分备份ftp目录(/var/ftp)生成名为 年-月-日.tar.gz 的压缩包,并把压缩包的权限修改为只有root有读权限,其他都没有权限。把压缩包移动到root主目录下。然后清空/var/ftp下的所有内容。
假设/var/ftp目录已存在。

#~/linux-6/backupFtpLog
 1 #!/bin/bash
 2 #获取年、月、日
 3 year=`date -I | cut -d - -f1`
 4 month=`date -I | cut -d - -f2`
 5 day=`date -I | cut -d - -f3`
 6 #打包/var/ftp目录
 7 tar -zcvf "/root/${year}-${month}-${day}.tar.gz" /var/ftp
 8 #修改权限400
 9 chmod 400 "/root/${year}-${month}-${day}.tar.gz"
10 #清空ftp目录
11 rm -rf /var/ftp/*

定时器的内容如下:

#/var/spool/cron/root
 1 30 8 * * * /root/linux-6/startFtp.sh
 2 30 23 * * * /root/linux-6/stopFtp.sh
 3 30 8-23/1 * * * /root/linux-6/pingBaidu.sh
 4 50 23 * * * /root/linux-6/backupFtpLog.sh

知识点

1. 定时器:crontab

可以设置任务定时执行。
Linux下的任务调度分为两类,系统任务调度和用户任务调度。

  • 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。
    在/etc/crontab文件,这个就是系统任务调度的配置文件。
  • 用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。
    用户可以使用 crontab 工具来定制自己的计划任务。
    在crontab 文件都被保存在/var/spool/cron目录中。其文件名与用户名一致。

crontab 文件的格式:

{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}

  • minute: 区间为 0 – 59
  • hour: 区间为0 – 23
  • day-of-month: 区间为0 – 31
  • month: 区间为1 – 12. 1 是1月. 12是12月.
  • Day-of-week: 区间为0 – 7. 周日可以是0或7.

注:
定时任务一定是绝对路径,且目录必须存在才能出结果
crontab 服务一定要开启运行

Crontab命令的选项

  • crontab –e : 修改 crontab 文件. 如果文件不存在会自动创建。
  • crontab –l : 显示 crontab 文件。
  • crontab -r : 删除 crontab 文件。
  • crontab -ir : 删除 crontab 文件前提醒用户。

2. 发送邮件:mail

#安装mailx
yum -y install mailx

mail命令的选项

  • -s:主题 后接主题
  • -c:抄送 后接多个用户
  • -b:暗送
  • -a:附件 后接文件
  • -f 发送人邮件地址
  • -F 发件人姓名

例如:
mail [-option] 收件地址 < 文件(正文.txt)

直接输入mail可以查看当前用户的邮件

输入后可见
> N [message list] 用户 日期 主题
N 表示邮件未读
[message list] 表示邮件序号

一些问题

1. 语法错误xx: 未预期的文件结尾

在linux下运行shell脚本时,遇到错误提示。
仔细检查,脚本文件出现的语法错误。

“shell不会对错误进行精确定位,而是在试图结束一个语句时进行错误统计。所以在shell打印出一个脚本错误后,不要只看那些疑问行,而是要观察整个相关代码段.”
转载自:https://blog.csdn.net/yoyofu007/article/details/92760957

#if后面忘记写fi了

2. 未预期的符号 `fi’ 附近有语法错

使用if语句时,如果else中没有语句,不用写,不然报错

3. cron发邮件提示:权限不够

#利用chmod命令给文件赋予x权限
chmod 755 xxxxx

猜你喜欢

转载自blog.csdn.net/LittleSeedling/article/details/105801871
今日推荐