定时任务及发送邮件

定时任务,用于执行在Linux中的重复性工作。如:命令(同步系统时间),脚本(备份,系统巡检)。

服务使用流程:

部署;

配置,如何使用这个服务通过配置文件,通过命令,初级使用:能用就行;提高:额外的配置;

优化或注意事项:安全......

排障:难点;1,通过错误提示解决,2,学会去看日志;3,高级:让服务输出错误提示或输出更加详细的错误提示(通过重定向);

其他:1,做好监控,2,做好备份,3,做好日志收集;4,统一认证;

======================================================================

概述:

定时任务软件包名字:cronie,服务名字(进程)crond:

[root@web01 ~]# rpm -qa cronie

cronie-1.4.11-23.el7.x86_64

# rpm -ql cronie

/etc/cron.d

/etc/cron.d/0hourly

/etc/cron.deny

/etc/pam.d/crond

/etc/sysconfig/crond

/usr/bin/crontab

/usr/lib/systemd/system/crond.service

/usr/sbin/crond

/usr/share/doc/cronie-1.4.11

/usr/share/doc/cronie-1.4.11/AUTHORS

/usr/share/doc/cronie-1.4.11/COPYING

/usr/share/doc/cronie-1.4.11/ChangeLog

/usr/share/doc/cronie-1.4.11/INSTALL

/usr/share/doc/cronie-1.4.11/README

/usr/share/man/man1/crontab.1.gz

/usr/share/man/man5/crontab.5.gz

/usr/share/man/man8/cron.8.gz

/usr/share/man/man8/crond.8.gz

/var/spool/cron

----------------------------------------------------------------------------------------------------------

目录结构:

rpm -ql cronie

/etc/cron.d

/etc/cron.d/0hourly

/etc/cron.deny

/etc/pam.d/crond //这几个不用管

用户的配置文件的目录:

/var/spool/cron  //用户的定时任务的配置文件的目录


/etc/crontab //不推荐使用这个,系统定时任务的配置文件

比如:

/var/spool/cron/mclind

用crontab这个命令来编辑这个目录文件

日志文件:/var/log/cron

可以了解下面的配置文件:

[root@web01 ~]# ls -ld /etc/cron.*

drwxr-xr-x. 2 root root 36 12月 7 19:34 /etc/cron.d  

drwxr-xr-x. 2 root root 42 12月 6 07:41 /etc/cron.daily //系统定时任务,每天运行

-rw-------. 1 root root 0 8月 9 2019 /etc/cron.deny

drwxr-xr-x. 2 root root 22 12月 6 07:41 /etc/cron.hourly  //系统定时任务,每小时运行

drwxr-xr-x. 2 root root 6 6月 10 2014 /etc/cron.monthly //系统定时任务,每小时运行

drwxr-xr-x. 2 root root 6 6月 10 2014 /etc/cron.weekly //系统定时任务,每周运行

======================================================================

使用指南

检查是否运行、开机自启动

# systemctl status crond

============

crontab用于定时任务的规则进行增删改查。

选项:

-e:编辑当前用户的定时任务,相当于在vi /var/spool/cron/root(root为当前用户名);

-l:查看当前用户的定时任务,相当于在cat /var/spool/cron/root(root为当前用户名);

-u:指定用户名;

-r:清空当前用户的定时任务;无提示;

-i:清空定时任务之前作提示;

输入crontab -e,即可进入编辑模式,和vim类似;

格式:

* * * * * 命令

分 时 日 月 周 comand to be executed

分:0-59

时:0-23

日:1-31

月:1-12

周:0-6,0或7都代表周日,1-6代表周一到周六;

======================================================================

案例:每天早上8:30分,去学校

#1,test01 //这是注释

30 8 * * * go to school

晚上12点上床睡觉

* 00 * * * go to bed

00 00 * * * go to bed

//这两种有什么区别?

//第一种,每天的半夜12点,每分钟都go to bed;

//第二种,每天半夜12点,00分,go to bed一次;

//综上,涉及到小时,天,周几的时候,分钟位置上记得写个数(比如00),多少都行;

----------------------------------------------------------------------------------------------------------

定时任务部分的特殊符号:

/:斜线,每隔XX时间,比如:*/2 * * * *,每2分种;

-:减号,表示范围,比如:00 8-18/2 * * *,8点到晚上18点期间每2个小时;

,:逗号,独立的一些时间,比如:00 8,9,12,14,18 * * *,8,9,12,14,18点,只有这几个;适用于没规律的时候;

----------------------------------------------------------------------------------------------------------

接着找案例:

每天早7点到晚11点,每2个小时运行cmd命令

00 07-23/2 * * * CMD

1)每2分钟同步系统时间,命令要使用绝对路径,输出清空:

*/2 * * * * /sbin/ntpdate ntp1.aliyun.com &>/dev/null

写好之后要调试(测试,检查 )(这里可以先修改一下时间,看能否同步)(date -s '20221111 11:11:11'

1,日志:看是否运行(定时任务日志,只能提示是否运行了,但无法告知是否成功,tail -f /var/log/cron);

2,结果:查看定时任务的结果(时间是否修改,压缩包是否生成);

----------------------------------------------------------------------------------------------------------

为什么要用crontab -e编辑定时任务,而不是直接编辑文件呢?因为crontab -e,在保存时候,还有语法检查的功能;

定时任务书写流程:

1,分析要求需要使用什么命令并调试;

2,书写脚本(命令较多,功能复杂)与调试;

3,书写定时任务的配置文件(绝对路径,定向到空)

4,调试;

======================================================================

案例:02,每天定时备份/etc/到/backup/下面

备份时间:业务低谷期,比如凌晨1点备份;

命令:tar命令;

脚本:命令大礼包 .sh .bash结尾;

定时任务配置:

命令:

mkdir -p /backup/ //这只用创建一次

tar zcf /backup/etc-`date +%F`.tar.gz /etc/

脚本:

专用脚本目录:(自己规划,备份放哪,脚本放哪,软件包放哪)

mkdir -p /server/scripts

cd /server/scripts

vim backup-etc.sh //名字,建议见名知义

以下是脚本内容:

tar zcf /backup/etc-`date +%F`.tar.gz /etc/

脚本内容完毕,对,只有这一行,就是上面执行的一行;

sh /server/scripts/backup-etc.sh //执行脚本

书定定时任务:

#2,这是一个定时备份/etc/目录任务,by root at Xxxx

00 01 * * * /bin/sh /server/scripts/backup-etc.s >/dev/null 2>&1

//一开始测试,可以设置频率高一点,比如每分钟,没问题了,可以设置正常要求时间;

tail -f /var/log/cron //查看日志检查

watch ls -l //watch,每2秒运行一下命令,这就是方便检查,不用一次交敲命令

======================================================================

脚本与变量:

变量,可以改变的量,在脚本中可以重复使用;

a = 'asdf'

echo $a //变量取值

dir=/server/scripts/

file=backup-etc.sh

echo $dir$file

脚本开头:建议加上#!/bin/bash,这是一个说明;

对以上脚本改写:

#脚本开始

#!/bin/bash

#定义变量

time=`date +%F_%w`

tar zcf /backup/etc/-$time.tar.gz /etc/

#至此脚本改完;;

======================================================================

======================================================================

定时任务注意事项(箴言)

1)增加注释;

2)尽量使用脚本;

3)定时任务的文件,脚本使用绝对路径;

4)命令使用绝对路径;

5)定时任务中执行的命令或脚本定向到空或追加到文件;

==========================

定时任务关于命令路径的故障:

现在:手动执行或脚本执行是好的,但放定时任务就提示命令不存在;command not found/no such file or directory

在定时任务运行命令或脚本的时候,只能识别到/bin或者/usr/bin目录下面的命令;

只要不在这些目录下面的命令,就要使用绝对路径或者重新定义下PATH;

PATH,Linux环境变量,存放命令的位置(路径),以冒号:分隔;查看命令:echo $PATH;

解决方案:

使用绝对路径,或者在脚本开头,重新加载PATH变量;

======================================================================

脚本中重新加载PATH

#!/usr/bin

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin //重新定义

source /etc/profile //重新加载PATH环境变量,这两种都可以,source也可以写成.

ip a s eth0

ifconfig eth0

======================================================================

定时任务没有定向到空或追加到文件故障案例

现象:

邮件服务开启: 不断收到邮箱 You have new mail in /var/spool/mail/root

邮件服务关闭: 一些邮件的临时目录不断堆积小文件. /var/spool/postfix/maildrop

原因:

定时任务运行命令或脚本的时候,命令或脚本有输出,定时任务就会通过邮件形式发送给root.

解决:

定时任务中命令或脚本定向到空或追加到文件.

#定向到空

#1. 同步时间

*/2 * * * * /sbin/ntpdate ntp1.aliyun.com

#追加到文件

#4. echo

* * * * * echo hello >> /tmp/lidao.txt 2>&1

#2. 定时备份 /etc/ 目录

00 01 * * * /bin/sh -x /server/scripts/backup-etc.sh &>> /tmp/script.log

======================================================================

案例:用脚本(使用变量)定时备份 /etc/ 目录

# cat backup-v1.sh

#!/bin/bash

#author: mclind

#desc: backup etc add ip

#version: v1

#变量

ip=`hostname -I | awk '{print $1}'`

time=`date +%F_%w`

#dir=/backup/$ip

#full_file=$dir/etc-$time.tar.gz

#操作

mkdir -p /backup/$ip

tar zcf /backup/$ip/etc-$time.tar.gz /etc/

//至此,脚本写完,下面写定时任务 ,命令行输入crontab -e开始:

# 备份/etc/目录,by mclind 20230101

00 00 * * * /usr/bin/sh /server/script/backup.sh >>/dev/null 2>&1

//书写完毕,搞定

======================================================================

发送邮件:在Linux上,找一个源邮箱,发给目标邮箱。

步骤:

1、先找源邮箱的授权码,并打开SMTP,以126邮箱为例:

        登录邮箱,找到  “设置”,打开  “POP3/SMTP/IMAP”  ,开启服务哪里,开启IMAP/SMTP服务和POP3/SMTP服务,默认是关闭的,开启需要手机发送一条短信;

2、配置linux mail.rc配置发件人信息

        # vim /etc/mail.rc #下面内容写到最后

set nss-config-dir=/etc/pki/nssdb/

set smtp-user-starttls

set ssl-verify=ignore

set from=username@126.com  //配置发件人

set smtp=smtps://smtp.126.com:465  //配置使用126发送邮件

set smtp-auth-user=username@126.com  //用户名,邮箱名字,如果

set smtp-auth-password=KNDDCBTLVJISZJGN  //授权码

set smtp-auth=login  //认证形式login

set nss-config-dir=/etc/pki/nssdb/  //这3行用于配置加密方式传输,不加密方式不用配

set smtp-user-starttls //这3行用于配置加密方式传输,不加密方式不用配

set ssl-verify=ignore //这3行用于配置加密方式传输,不加密方式不用配

//内容写完了,接着就可以发送邮件测试了

# mail -s 'test' 2312823999@qq.com < haha.txt //这是发邮件命令,但会有一个错误提示:从下一行开始

//Error in certificate: Peer's certificate issuer has been marked as not trusted by the.

//这个,是配置加密方式发送邮件错误,因为加密,所以需要认证,传输时候缺少文件或证书认证,就报错了。

下面附上解决方法,就是执行下面内容即可(在命令行直接粘贴执行也可以,放shell脚本执行也可以)

echo -n | openssl s_client -connect smtp.126.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/pki/nssdb/126.crt

certutil -A -n "GeoTrust SSL CA" -t "C,," -d /etc/pki/nssdb/ -i /etc/pki/nssdb/126.crt

certutil -A -n "GeoTrust Global CA" -t "C,," -d /etc/pki/nssdb/ -i /etc/pki/nssdb/126.crt

certutil -L -d /etc/pki/nssdb/

cd /etc/pki/nssdb/

certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i 126.crt

//至此,解决方案的命令完,再次发送邮件,就不会报错了,

----------------------------------------------------------------------------------------------------------

如果发邮件想要附上附件,也可以加参数-a

# mail -s 'test' -a haha.txt 2312823999@qq.com < haha.txt

----------------------------------------------------------------------------------------------------------

上面配置的是加密发邮件,也可以不用加密码方式:

set from=username@163.com

set smtp=smtp.163.com

set smtp-auth-user=username@163.com

set smtp-auth-password=BGRCTL CZXIT

set smtp-auth=login

======================================================================

脚本如何输出表格?一般用开发语言生成,这里我不会,就用csv格式糊弄一下了~~

在脚本里,用echo输出到表格,但有一点,输出格式需要调一下;

echo "主机名,${hostname}"  //在echo输出的语句里,用逗号分隔,就形成了csv格式文件,这就是一行

echo "IP,${ip}"  // 这是另一行,这里只能输出内容,没有excel里边的函数等功能

//下面就不写了,就这俩测试一下看看就可以了。

# sh /server/script/csvtest.sh > test.csv  //这就生成了,可以拉到windows下使用查看

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容