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