首页 > 系统相关 >Linux基础24 定时任务, 发邮件, date命令

Linux基础24 定时任务, 发邮件, date命令

时间:2023-06-05 16:23:41浏览次数:41  
标签:24 命令 ls Linux date 定时 执行 root

date命令

[root@localhost ~]# date
2023年 06月 01日 星期四 00:57:36 CST
[root@localhost ~]# date +%F
2023-06-01
[root@localhost ~]# date +%F-%T
2023-06-01-01:17:37
[root@localhost ~]# date +%Y
2023
[root@localhost ~]# date +%m
06
[root@localhost ~]# date +%d
01
[root@localhost ~]# date +%H
01
[root@localhost ~]# date +%M    # 分钟
20
[root@localhost ~]# date +%S    # 秒
19
[root@localhost ~]# date +%Y%m%d%H%M%S    # 年月日时分秒
20230601012125

# 设置时间
date -s '2000-12-20'
#向阿里同步时间
yum install ntpdate
ntpdate time1.aliyun.com

 


定时任务:

crond就是计划任务,类似于我们平时生活中的闹钟,定点执行。

 

企业需求:定时任务crond
1.做备份
2.做巡检
3.日志切割
4.临时文件清理
5.定时向互联网同步时间

 

定时任务:crond
命令:crontab

 

定时任务的配置文件:

[root@uegame ~]# vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin    # 能直接加载的路径,和当前环境变量$PATH不一样(crontab命令尽量使用绝对路径)
MAILTO=root            # 默认root来创建, 会给root发邮件,命令后面跟 &>/dev/null 定向到黑洞就不会发邮件

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)    # 写00或0都可以
# |  .------------- hour (0 - 23)        # 写00或0都可以
# |  |  .---------- day of month (1 - 31)    # 如果为31,如这个月没31就跳过
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
 分 时 日 月 周  root      命令

例:
* * * * * /bin/echo 1 >> /tmp/a.txt    # 每分钟执行一次    (>>写入定时任务的内容,而不是命令执行结果的内容)
59 * * * * /bin/echo 1 >> /tmp/a.txt    # 每个小时的第59分执行一次
59 00 * * * /bin/echo 1 >> /tmp/a.txt    # 每天凌晨12点59分执行一次
00  23  *  12  1 /bin/echo 1 >> /tmp/a.txt

定时任务内容格式

#每天的凌晨2点执行ls命令
00 02 * * * ls

#每月的1号的凌晨2点执行ls命令
00 02 1 * * ls

#每年的2月14日凌晨2点执行ls命令
00 02 14 2 * ls

#每周日的凌晨2点执行ls命令
00 02 * * 7 ls

#每年的6月份里面的每个周五凌晨2点执行ls命令
00 02 * 6 5 ls

#每个月的14号,但凡是一个周日,凌晨2点就执行ls
00 02 14 * 7 ls

#如果2月14号是周日就在凌晨的2点执行 ls命令
00 02 14 2 7 ls

#每天的凌晨2点,每隔10分钟执行一次ls命令(2点-3点之间,10分钟执行一次)
*/10  02 * * * ls

#每分钟执行一次ls命令     
* * * * *  ls

#每年的2月14日凌晨00点执行ls命令
00 00 14 2 *  ls

#每隔5分钟执行一次ls命令
*/5 * * * *  ls
*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com &>/dev/null

#每年的1月5月8月的每天的凌晨2点执行ls命令
00 02 * 1,5,8 * ls

#每月的1号到8号凌晨2点执行ls命令
00 02 1-8 * *  ls

#每天的21点执行ls命令
0 21 * * * ls

#每月的1号,10号,22号,的4点45分执行ls命令
45 4 1,10,22 * * ls

#每个月的1号到10号的4点45分执行ls命令   
45 4 1-10 * * ls

#每个月的每隔2天的8点03分,8点15分  9  10  11点 3分 15分
3,15 8-11 */2 * * ls

#每天7到23点每隔一小时执行一次ls
0 7-23/1 * * * ls

#每周一到周五的晚上21点15分执行ls命令
15 21 * * 1-5 ls      

 

定时任务命令

crontab:
    -l:查看定时任务 list
    -e:编辑定时任务    # 保存时会监测运行是否会有问题
    -u:指定用户    # crontab -e -u qiudao编辑qiudao下的定时任务    (可在/var/spool/cron/下查看)
            # 注意: 可以在/var/spool/cron/下用户文件中直接编辑任务,但保存不会监测运行是否有问题
    -r:删除所有定时任务    # crontab -u qiudao -r 删除qiuidao下所有定时任务

例: 添加和阿里同步时间的定时任务
crontab -e    # 编辑定时任务(命令上方加入注释和作者名,规范)
# 时间同步 By:ldc At:2023-06-03
*/5 * * * * /usr/sbin/ntpdate &>/dev/null

定时任务备份案例

1.每天的下午3,5点,每隔半小时执行一次sync命令
#每天的下午3,5点,每隔半小时执行一次sync命令 By:zls
*/30 15,17 * * * /usr/bin/sync &>/dev/null


2.每天凌晨3点做一次etc目录的备份,打包,备份到/backup目录下
需求:将备份命令写入一个脚本中

任务:
1.每天备份文件名要求格式:2018-02-20_hostname_etc.tar.gz
2.存放备份内容的目录要求只保留3天的数据
3.在执行计划任务时,不要输出任务信息

# 写脚本,通过定时任务执行脚本实现 vim backup_etc.sh
----------------------------------------------------------- #!/bin/bash riqi=`date +%F` zhuji=`hostname` shijianchuo=`date +%F-%T` mkdir -p /backup # 记录日志, &&前面命令执行成功才会执行后面的命令 cd / && tar zcf /backup/${riqi}_${zhuji}_etc.tar.gz etc && echo "$shijianchuo 备份成功" >> /tmp/bak_result.txt find /backup -mtime +3 |xargs rm -f ------------------------------------------------------------
crontab -e # 编辑定时任务 # 每天凌晨3点做一次etc目录的备份,打包,备份到/backup目录下 by ldc 00 03 * * * /bin/sh /root/backup_etc.sh &>/dev/null

crontab注意事项:

    1) 给定时任务注释
    2) 将需要定期执行的任务写入Shell脚本中,避免直接使用命令无法执行的情况tar date
    3) 定时任务的结尾一定要有&>/dev/null或者将结果追加重定向>>/tmp/date.log文件
    4) 注意有些命令是无法成功执行的 echo "123" >>/tmp/test.log &>/dev/null
    5)如果一定要是用命令,命令必须使用绝对路径

不允许特定用户添加定时任务(了解)

vim /etc/cron.deny
qiudao    # 写入用户名即可

 

计划任务如何调试

1.crond调试
    1) 调整任务每分钟执行的频率, 以便做后续的调试。
    2) 如果使用cron运行脚本,请将脚本执行的结果写入指定日志文件, 观察日志内容是否正常。
    3) 命令使用绝对路径, 防止无法找到命令导致定时任务执行产生故障。
    4) 通过查看/var/log/cron日志,以便检查我们执行的结果,方便进行调试。

2.crond编写思路

    1.手动执行命令,然后保留执行成功的结果。
    2.编写脚本
        脚本需要统一路径/scripts
        脚本内容复制执行成功的命令(减少每个环节出错几率)
        脚本内容尽可能的优化, 使用一些变量或使用简单的判断语句
        脚本执行的输出信息可以重定向至其他位置保留或写入/dev/null
    3.执行脚本
        使用bash命令执行, 防止脚本没有增加执行权限(/usr/bin/bash)    # 如果脚本有执行权限可直接执行,但不好管理
        执行脚本成功后,复制该执行的命令,以便写入cron
    4.编写计划任务
        加上必要的注释信息, 人、时间、任务
        设定计划任务执行的周期
        粘贴执行脚本的命令(不要手敲)
    5.调试计划任务
        增加任务频率测试
        检查环境变量问题
        检查crond服务日志 /var/log/cron

 

使用定时任务发邮件

# 安装发邮件
yum install -y mailx vim /etc/mail.rc # shift+g调到最下面进行编辑
-------------------------------------------- #发件人 set [email protected] #发件人用户名 set [email protected]  # 与发件人相同 #发件人密码(QQ邮箱不可以使用密码,只能使用授权码) set smtp-auth-password=xxx #登录方式 set smtp-auth=login #邮件服务器协议及端口 set smtp=smtps://smtp.qq.com:465 #忽略证书 set ssl-verify=ignore #指定证书位置 set nss-config-dir=/root/.certs ---------------------------------------------
# 进qq邮箱,点击上方设置,点账户,点击开启POP3/SMTP服务,获取授权码 # 配置邮件证书 # 创建邮件证书的目录 mkdir -p /root/.certs cd /root/.certs/ echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt # 下面的命令一起执行 certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt certutil -L -d /root/.certs certutil -A -n "GeoTrust SSL CA -G3" -t "Pu,Pu,Pu" -d ~/.certs -i ~/.certs/qq.crt ---------------------------------------------
# 测试 cat /etc/passwd|mail -s 'passwd' [email protected] # -s 加上主题 --------------------------------------------

# 在/root/qingshu/路径下写多份文件
# 写定时任务脚本 vim send_qingshu.sh
--------------------------------------------- #!/bin/bash # 获取目录里第一个文件 qs_name=`ls -1 /root/qingshu/|head -1` shijianchuo=`date +%F-%T` # 发邮件 cat /root/qingshu/${qs_name} |mail -s '致XXX' [email protected] # 发送后删除这份邮件 if [$? -eq 0 ];then echo "$shijianchuo 邮件发送成功" >> /tmp/send_qingshu.txt rm -f /root/qingshu/$qs_name fi
-----------------------------------------------
# 编辑定时任务,执行发送邮件脚本

 

标签:24,命令,ls,Linux,date,定时,执行,root
From: https://www.cnblogs.com/ludingchao/p/17458095.html

相关文章

  • Windows和Linux的环境变量
    环境变量概述环境变量(EnvironmentVariables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的pat......
  • Linux和Mac环境变量设置
    在linux和mac中设置环境变量我已知的有两种方式,一种是修改环境变量的文件,另一种是使用export关键字。之所以不提windows,是因为我所知的在windows上配置环境变量只有通过窗口然后点击这一种方式。以mac配置pyenv环境变量为例:1、export方式查看当前shell是zsh还是bash,如果是bas......
  • linux tool objdump
    NAMEobjdump-displayinformationfromobjectfiles.SYNOPSISobjdump[-a|--archive-headers][-bbfdname|--target=bfdname][-C|--demangle[=style]][-d|--disassemble][-D|--disa......
  • linux简单挂载u盘步骤
    第一步:创建要挂载的usb目录,一般选择在:mkdir/mnt/usb第二步:使用mount命令挂载u盘:sudomount/dev/sdb1/mnt/usb此时可以通过访问/mnt/usb浏览u盘文件第三步:完成操作后,使用umount解除挂载:sudoumount/mnt/usb......
  • linux扫描hba卡命令,如何在redhat中查看HBA卡的信息
    如何在redhat中查看HBA卡的信息?针对这个问题,今天小编总结这篇有关HBA卡的文章,可供感兴趣的小伙伴们参考借鉴,希望对大家有所帮助。HBA卡主要用于安装在服务器上,连接到光纤交换机,或者也可以直联到存储,在存储和服务器之间形成FCSAN。现在HBA卡的速率一般为8GB、16GB,一张卡上一般有一......
  • Linux后台进程管理以及ctrl+z(挂起)、ctrl+c(中断)、ctrl+\(退出)和ctrl+d(EOF)的区别
    一、后台进程管理命令fg、bg、jobs、&、ctrl+z、ctrl+c、ctrl+\、ctrl+d1、&加在一个命令的最后,可以把这个命令放到后台执行,如gftp&,2、ctrl+z可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行3、jobs查看当前有多少在后台运行的命令jobs-l......
  • Linux 下串口驱动头文件之tty.h
    linux-2.6.29/include/linux#ifndef_LINUX_TTY_H#define_LINUX_TTY_H/**'tty.h'definessomestructuresusedbytty_io.candsomedefines.*/#ifdef__KERNEL__#include<linux/fs.h>#include<linux/major.h>#include<linux/termi......
  • Linux 下串口驱动头文件之termios.h
    在linux-2.6.29/include/asm-generic下的termios.h/*termios.h:generictermios/termiousercopying/translation*/#ifndef_ASM_GENERIC_TERMIOS_H#define_ASM_GENERIC_TERMIOS_H#include<asm/uaccess.h>#ifndef__ARCH_TERMIO_GETPUT/**Translatea"t......
  • @Update执行多条更新语句
    GPT告诉我是这样写的,结果语法错误,我在每个语句中加上分号,依然语法错误 @Update({"UPDATEtable1SETcolumn1=#{value1}WHEREid=#{id};","UPDATEtable2SETcolumn2=#{value2}WHEREid=#{id};"})voidupdateValues(@Param("id"......
  • Linux系统之CentOS和Ubuntu的区别
    CentOS(CommunityENTerpriseOperatingSystem)Linux发行版之一,它是来自于RedHatEnterpriseLinux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的RedHatEnterpriseLinux使用。Ubuntu一个以桌面......