crontab中反引号和$()无效的解决
问题描述
1.增加了一条crontab,删除本月中2天以前的日志
10 02 * * * /bin/find /data/logs/php/$(date +%Y%m)/ -mtime +2 | xargs rm -rf
可是看上面的crontab总是运行失败,然后查/var/log/cron 日志报
Jul 22 02:02:01 localhost CROND[7699]: (root) CMD (/bin/find /data/logs/php/`date +")
显示$(date +%Y%m) 这个有问题,在终端上运行是没问题的,后来搜索baidu
问题原因:
在crontab中%字符被认为是换行,所以你的命令中有%时,在crontab中要加\转义
比如
30 * * * * date '+%D' >datefile
是错误的
正确的应该是
30 * * * * date '+\%D' >datefile
所以上面正确的crontab是:
10 02 * * * /bin/find /data/logs/php/$(date +\%Y\%m)/ -mtime +2 | xargs rm -rf
扩展
造成crontab无法正常运行的常见原因
问题及对应解决方法
【1】脚本的执行权限问题
写好脚本后,要赋予脚本执行权限,避免权限问题
<1>赋予脚本执行权限
chmod +x test1.sh
【2】脚本在crontab里的路径问题
<1>查看crontab中,你的脚本的位置是否有错误
注意是否字符错误
查看计划任务:
crontab -l
写入计划任务:
crontab -e
<2>如无错误,查看路径是否错误
在计划任务里要使用全路径
例如:
*/5 * * * * /App/test/test1.sh
<3>修改有问题的字符或路径即可
【3】计划任务的时间设置问题
<1>查看计划任务的时间是否设置的有问题
如果crontab设置的时间错误,会导致无法按原计划时间进行任务
计划任务的5个*号依次代表的含义:
分 时 日 月 周
<2>如有问题,修改为正确的时间即可
【4】脚本的头部问题
<1>查看一下你的脚本的头部,查看你为脚本设置的解释器
<2>查看当前系统是否包含此解释器或路径是否与脚本头部相同
可以用whereis 查看,例如
whereis sh
<3>如果是脚本的解释器的路径有误,将脚本的头部的路径修改为当前系统的路径即可
【5】脚本的执行命令问题
在Linux系统中,使用crontab执行脚本,由于crontab没有环境变量,它是找不到你使用的命令的,需要使用命令的全路径,才可使用命令
例如:使用python
0 1 * * * /usr/bin/python /App/test/test1.py
【6】环境变量的问题
这个是最常见的问题。
crontab执行计划任务时,它并不会从用户的profile文件中读取环境变量,所以会导致命令执行失败。
<1>让脚本读取环境变量
在你的脚本的开头中添加如下几行,也可读取其他变量文件
#!/bin/bash
source /etc/profile
source ~/.bash_profile
补充
【1】crontab的环境变量
如果遇到crontab中脚本的执行命令无法使用的情况,也可以通过修改/etc/crontab中的PATH添加变量
【2】crontab特殊字符
在crontab中,%是用来表示换行的。因此,如果有使用%,需要在前方加入\进行脱义。
例如date +%F,在crontab中,要写为date +\%F
crontab中反引号和$()无效的解决的更多相关文章
- Shell中反引号和$()的区别
Shell中可以用来实现变量代换的命令有两种,一种是由反引号括起来的一条命令另一种是由$()括起来一条命令,shell先执行这条命令,然后见输出结果立刻代换到当前命令行中. 例如定义一个变量存放dat ...
- Mysql中反引号和单引号的区别
反引号,一般在ESC键的下方. 它是为了区分MYSQL的保留字与普通字符而引入的符号.举个例子:SELECT `select` FROM `test` WHERE select='字段值'在test表 ...
- Shell中反引号(`)与$()用法的区别
今天有人提问: echo `echo \\\\\\\w` echo $(echo \\\\\\\w) 为什么输出的不一样? 这就引申出了另一个问题:反引号与$()有没有区别? 这是一个非常有意思的问题 ...
- Ajax异步获取html数据中包含js方法无效的解决方法
页面上使用js写了一个获取后台数据的方法 function data() { var tab = $("#dic") $.ajax({ url: '../demo.ashx?met ...
- WebAPI中controller添加[AllowAnonymous]无效的解决方法
对于Methods添加[AllowAnonymous]可以进行匿名访问,但是对于Controller添加时无效 public class AuthAttribute : AuthorizationFi ...
- rails中validates_confirmation_of验证方法无效的解决办法
rails的model中提供了很多种自带的验证方法,validates_confirmation_of可以验证变量xxx和xxx_confirmation是否相等:这可以用于验证2遍输入的密码是否一致 ...
- textArea中的maxlength是无效的 解决办法
-------------------------------------------------------------------------------------- <s:texta ...
- openerp-server.conf 中配置 dbfilter 参数无效的解决办法
来自:http://shine-it.net/index.php/topic,14517.html 以前就发现过这个问题, 今天重新在群里同大家讨论了一下. 有时候可能我们希望用户不从登陆界面的账套选 ...
- shell脚本中的反引号,单引号,双引号与反斜杠
转自:http://blog.sina.com.cn/s/blog_6561ca8c0102we2i.html 反引号位 (`)经常被忽略,而且容易与单引号弄混.它位于键盘的Tab键的上方.1键的左方 ...
随机推荐
- 剑指offer——14机器人的运动范围
题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...
- [eJOI2018]元素周期表
题目 \((r_1,c_1),(r_2,c_1),(r_1,c_2)\)三个格子存在就说明\((r_2,c_2)\)存在,如果我们将\(r_1,c_2,c_1,r_2\)都看成一些点的话,那么这个关系 ...
- USACO2005 Cow Acrobats /// 前缀和 oj23402
题目大意: N (1 ≤ N ≤ 50,000)头牛叠罗汉 找到最优排序使所有牛的风险值总和最小 每头牛重量 (1 ≤ Wi ≤ 10,000) 力量 (1 ≤ Si ≤ 1,000,000,000) ...
- Linux CPU负载状态:%us/%sy/%ni/%id/%wa/%hi/%si/%st含义
原文 Linux CPU负载状态:%us/%sy/%ni/%id/%wa/%hi/%si/%st含义 缙哥哥发现用了雅黑的探针,在 Linux 的 CPU 状态信息中发现,有“%us.%sy.%ni. ...
- MySQL 08章_数据库设计
一. 关系模型与对象模型之间的对应关系 序号 关系模型:数据库 对象模型:java程序 1 数据表table 实体entity:特殊的java类 2 字段field 属性attribute/字段fie ...
- geolocation获取当前位置显示及计算两地距离
获取当前经纬度 利用HTML5(以及基于JavaScript的地理定位API),可以很容易地在页面中访问位置信息,下面代码,就可以简单的获取当前位置信息: <!DOCTYPE html> ...
- js原型继承四步曲及原型继承图
一:js原型继承四步曲 //js模拟类的创建以及继承 //动物(Animal),有头这个属性,eat方法 //名字这个属性 //猫有名字属性,继承Animal,抓老鼠方法 //第一步:创建父类 fun ...
- Ajax加载数据的使用
需求就是不能再进入页面时加载数据,只能在点击其中一个按钮时把数据加载呈现出来.具体效果如最下面的图. 1.前台页面 <h1 " onclick="GetData(1)&quo ...
- Python连接数据库流行用到的第三方库
Python连接数据库流行用到的第三方库: mysqldb:只支持Python2.x mysqlclient : mysqldb的衍生版本,完全兼容mysqldb,同时支持Python3.x,安装较复 ...
- git连接gitee笔记
#首先参照 https://blog.csdn.net/zhangyu4863/article/details/80427289 #然后需要注意,在办公室无法使用 git remote add ori ...