记一次crontab中date命令错用导致的问题

news/2024/7/3 23:03:33

问题

我在crontab中添加一条定时任务如下,用于每天把旧日志移到指定目录:

1

0 0 * * * cd /home/vg/odp/log && mv *`date -d "-10 day" "+%Y%m%d"`* archives

然后这个定时任务似乎没有生效。单独执行后面的命令都是成功的没有报错。

原因追踪

crontab的执行情况,linux都会给对应的用户发邮件,因此可以通过邮件来定位问题。上面的任务在vg用户下,查看对应的邮件 /var/spool/mail/vg , 找到和出问题的任务相关的内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

From root@MyServer.localdomain Tue May 14 18:00:01 2019

Return-Path: X-Original-To: vg

Delivered-To: vg@MyServer.localdomain

Received: by MyServer.localdomain (Postfix, from userid 500)

id 694075F2AD; Tue, 14 May 2019 18:00:01 +0800 (CST)

From: root@MyServer.localdomain (Cron Daemon)

To: vg@MyServer.localdomain

Subject: Cron  cd /home/vg/odp/log && mv *`date -d "-10 day" "+

Content-Type: text/plain; charset=UTF-8

Auto-Submitted: auto-generated

X-Cron-Env: X-Cron-Env: X-Cron-Env: X-Cron-Env: X-Cron-Env: X-Cron-Env: Message-Id: Date: Tue, 14 May 2019 18:00:01 +0800 (CST)

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'

/bin/sh: -c: line 1: syntax error: unexpected end of file

上面清楚地记录了出错原因:unexpected EOF while looking for matching ``' 看报错得知还没有匹配到`命令就结束了,问题看似奇怪,因为定时任务命令单独拿出来执行是没有问题的,再仔细看邮件内容,Subject那一行:

1

Subject: Cron cd /home/vg/odp/log && mv *`date -d "-10 day" "+

显示的命令不全,到加号就结束了,%和后面的部分丢失了,结合报错基本可以定位原因,%是crontab里的特殊符号,表示新的一行开始,所以前面的命令就被截断了。

解决方式

如果crontab执行的命令中包含%需要用\转义,上面的例字改成这样就可以成功执行:

1

0 0 * * * cd /home/vg/odp/log && mv *`date -d "-10 day" "+\%Y\%m\%d"`* archives


http://www.niftyadmin.cn/n/2458201.html

相关文章

python入门(八) -- 函数

2019独角兽企业重金招聘Python工程师标准>>> 函数类似于Java中的方法,是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 1、函数定义 函数定义的规则: def 函数名(参数列表&#x…

八年数据库转型之路:技术易改,匠心永存

作者介绍 吴虞,SQL专家云团队成员,擅长解决SQL Server数据库性能、高可用、负载均衡等问题。 时间过得很快,从在博客上写第一篇文章到现在刚好一年,而自己在数据库这条路上已经走过八年。回想下这八年,感觉总是在“迷茫…

layui数据表格url是什么

layui数据表格url是数据接口,用来接收数据的,其中LayUI数据表格URL默认为Get请求,语句格式如“URL:sypaysrhlist.aspx?action...”。 本教程操作环境:Windows7系统、layui2.4版,该方法适用于所有品牌电脑。 推荐&…

python3 数组(列表)初始化

python3 数组(列表)初始化 1. 初始化一个定长的数组 有时需要预定义一个定长的数组,并给每个元素赋值 方法1: python3中代码如下: 1 2 3 4 #codingutf-8 item PythonTab array [item for v in range(10)] #把 item 的值赋给 range()迭…

百度编辑器去除一些无用标签方法

1、去掉每个li的中加<p></p>的方法&#xff1a; 直接搜索 //进入编辑器的li要套p标签 注释以下代码&#xff1a; //进入编辑器的li要套p标签me.addInputRule(function(root){//utils.each(root.getNodesByTagName(li),function(li){// var tmpP UE.uNode.creat…

css selector什么意思

css selector指的是css选择器&#xff0c;是用来匹配网页中的dom元素的&#xff0c;常用选择器可分为标签名选择器、类选择器、id选择器、派生选择器、子元素选择器、分组选择器和伪元素选择器。 推荐&#xff1a;《css视频教程》 css selector指的是css 选择器&#xff0c;是用…

C++抽象编程·运算符重载与友元函数

运算符重载&#xff08;Operator overloading&#xff09; 从我们在几个前篇的类的层次介绍中可以知道&#xff0c;C可以扩展标准运算符&#xff0c;使其适用于新类型。这种技术称为运算符重载。 例如&#xff0c;字符串类重载运算符&#xff0c;使其在应用于字符串时的行为会有…

PHP生成伪随机数

版本要求最低PHP7&#xff0c;如果对生成随机数要求比较多&#xff0c;可以选择使用zend-math、random-lib或random_compat库。(几乎所有PHP库都可以在 https://packagist.org 搜索到) /*** 获取随机数字** author 剑心 <[0x00gcgmail.com]>** param int $size…