reference:Crontab的20个例子
先科普一下date的使用方法,在sh脚本中经常会使用得到
date -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号; -s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号; -u:显示GMT; --help:在线帮助; --version:显示版本信息。 %H 小时,24小时制(00~23) %I 小时,12小时制(01~12) %k 小时,24小时制(0~23) %l 小时,12小时制(1~12) %M 分钟(00~59) %p 显示出AM或PM %r 显示时间,12小时制(hh:mm:ss %p) %s 从1970年1月1日00:00:00到目前经历的秒数 %S 显示秒(00~59) %T 显示时间,24小时制(hh:mm:ss) %X 显示时间的格式(%H:%M:%S) %Z 显示时区,日期域(CST) %a 星期的简称(Sun~Sat) %A 星期的全称(Sunday~Saturday) %h,%b 月的简称(Jan~Dec) %B 月的全称(January~December) %c 日期和时间(Tue Nov 20 14:12:58 2012) %d 一个月的第几天(01~31) %x,%D 日期(mm/dd/yy) %j 一年的第几天(001~366) %m 月份(01~12) %w 一个星期的第几天(0代表星期天) %W 一年的第几个星期(00~53,星期一为第一天) %y 年的最后两个数字(1999则是99)
在输出中如果要有空格,后面的格式语句必须是双引号包括的,不能是{}大括号
date +"%Y-%m-%d %H:%M" 输出: 2019-02-22 15:45 date +{%Y-%m-%d %H:%M} 就会报错:date: extra operand ‘%H:%M}’
crontab –e 输入下面的计划,每天20点备份上传一次tomcat log文件
0 20 * * * /home/ec2-user/backuptomcat.sh >>/home/ec2-user/backtomcat.log
检查发现到时间没起作用,查看crond日志
1 [ec2-user@ip-172-31-27-98 ~]$ tail -F /var/log/cron 2 Feb 22 14:01:01 ip-172-31-27-98 run-parts(/etc/cron.hourly)[8878]: finished 0anacron 3 Feb 22 14:01:49 ip-172-31-27-98 crontab[8885]: (ec2-user) BEGIN EDIT (ec2-user) 4 Feb 22 14:02:09 ip-172-31-27-98 crontab[8885]: (ec2-user) END EDIT (ec2-user) 5 Feb 22 14:02:43 ip-172-31-27-98 crontab[8889]: (ec2-user) BEGIN EDIT (ec2-user) 6 Feb 22 14:03:08 ip-172-31-27-98 crontab[8889]: (ec2-user) REPLACE (ec2-user) 7 Feb 22 14:03:08 ip-172-31-27-98 crontab[8889]: (ec2-user) END EDIT (ec2-user) 8 Feb 22 14:03:13 ip-172-31-27-98 crontab[8893]: (ec2-user) LIST (ec2-user) 9 Feb 22 14:04:01 ip-172-31-27-98 crond[4057]: (ec2-user) RELOAD (/var/spool/cron/ec2-user) 10 Feb 22 14:11:49 ip-172-31-27-98 crontab[8918]: (ec2-user) BEGIN EDIT (ec2-user) 11 Feb 22 14:11:58 ip-172-31-27-98 crontab[8918]: (ec2-user) END EDIT (ec2-user) 12 13 [ec2-user@ip-172-31-27-98 ~]$ date 14 Fri Feb 22 22:12:15 CST 2019
原来我之前把服务器的时区修改了,但是没有出去crond,导致crond还是以旧时区运行。重启crond:
[ec2-user@ip-172-31-27-98 ~]$ sudo service crond restart Redirecting to /bin/systemctl restart crond.service [ec2-user@ip-172-31-27-98 ~]$ tail -F /var/log/cron Feb 22 14:03:08 ip-172-31-27-98 crontab[8889]: (ec2-user) REPLACE (ec2-user) Feb 22 14:03:08 ip-172-31-27-98 crontab[8889]: (ec2-user) END EDIT (ec2-user) Feb 22 14:03:13 ip-172-31-27-98 crontab[8893]: (ec2-user) LIST (ec2-user) Feb 22 14:04:01 ip-172-31-27-98 crond[4057]: (ec2-user) RELOAD (/var/spool/cron/ec2-user) Feb 22 14:11:49 ip-172-31-27-98 crontab[8918]: (ec2-user) BEGIN EDIT (ec2-user) Feb 22 14:11:58 ip-172-31-27-98 crontab[8918]: (ec2-user) END EDIT (ec2-user) Feb 22 14:13:42 ip-172-31-27-98 crond[4057]: (CRON) INFO (Shutting down) Feb 22 14:13:42 ip-172-31-27-98 crond[8944]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 54% if used.) Feb 22 14:13:42 ip-172-31-27-98 crond[8944]: (CRON) INFO (running with inotify support) Feb 22 14:13:42 ip-172-31-27-98 crond[8944]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
还是不行,网上搜索,解决办法参考:crontab执行时区与系统时间不一致问题。
可能是rsyslog日志服务没有重启,那就重启rsyslog,然后再重启crond,问题解决
[root@ip-172-31-27-98 ec2-user]# service rsyslog restart Redirecting to /bin/systemctl restart rsyslog.service [root@ip-172-31-27-98 ec2-user]# service crond restart Redirecting to /bin/systemctl restart crond.service [root@ip-172-31-27-98 ec2-user]# exit exit [ec2-user@ip-172-31-27-98 ~]$ tail -F /var/log/cron Feb 22 14:13:57 ip-172-31-27-98 crontab[8947]: (ec2-user) LIST (ec2-user) Feb 22 14:14:37 ip-172-31-27-98 crond[8944]: (CRON) INFO (Shutting down) Feb 22 14:14:49 ip-172-31-27-98 crond[8999]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 26% if used.) Feb 22 14:14:49 ip-172-31-27-98 crond[8999]: (CRON) INFO (running with inotify support) Feb 22 14:14:49 ip-172-31-27-98 crond[8999]: (CRON) INFO (@reboot jobs will be run at computer's startup.) Feb 22 14:15:22 ip-172-31-27-98 crontab[9003]: (ec2-user) LIST (ec2-user) Feb 22 22:16:15 ip-172-31-27-98 crond[8999]: (CRON) INFO (Shutting down) Feb 22 22:16:15 ip-172-31-27-98 crond[9058]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 91% if used.) Feb 22 22:16:15 ip-172-31-27-98 crond[9058]: (CRON) INFO (running with inotify support) Feb 22 22:16:15 ip-172-31-27-98 crond[9058]: (CRON) INFO (@reboot jobs will be run at computer's startup.)