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

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/7803

(0)
郭靖的头像郭靖
上一篇 2023年3月28日 下午5:22
下一篇 2023年3月29日 下午4:33

相关推荐

  • 超微浪潮服务器webbios配置raid

    这段时间比较奇怪,服务器总是和我过不去 ——O(∩_∩)O,前段时间刚搞了一台IBM服务器做RAID0安装EXSi。今天又来了台浪潮NF5245M3,个头一点都不小。上个图看看,第一次接触这个品牌服务器。  好了,说重点吧。这次主要是用来做数据库服务器测试机的,有两个要求:        1、做RAID0,提…

    2024年5月23日
    92600
  • wordpress上传图片提示“缺少临时文件夹”的解决方法

    在wordpress发布文章上传图片时出现了“缺少临时文件夹”的错误提示,该错误通常是由于服务器php配置的原因,如果之前上传图片正常,而且最近操作过服务器就很有可能是php配置导致的错误,解决方法也很简单,修改一下php配置文件即可。 Linux主机: 1、编辑配置文件php.ini,搜索查找upload_tmp_dir,修改为: upload_tmp_d…

    2023年5月5日
    1.7K00
  • 统一身份认证系统 OpenLDAP 完整部署

    LDAP 介绍LDAP 是什么?在那些地方用会用到 LDAP?LDAP英文名称:Lightweight Directory Access Protocol 轻型目录访问协议。常用在单点登录,用户可以通过一个用户和密码登录多个服务,方便管理。目前我们使用的一下工具,Jenkins,GitLab,Jumpserver,Grafana,Confluence,Nex…

    2023年12月11日
    1.1K00
  • 让你配置linux 路由,你该怎么配置

    如下图所示有两个网络,分别是0网段和2网段,路由器1组成0网段,路由器2从路由器一种分出一个2网段 如果要在不同网段直接通讯,需要添加路由,linux添加路由命令如下: route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If] add : 添加一条路由规则 del : 删除一条路由…

    2024年6月18日
    1.1K00
  • mysql之两个db实例中有两个表对比

    两个db实例中有两个表对比要确定两个数据库实例中的两个表是否存在差异,你需要比较这两个表的所有数据。这个过程可以通过多种方法实现,以下是几个常见的方法: SQL查询比较如果两个数据库相互可访问(例如,通过数据库链接),你可以编写SQL查询来比较它们的数据。以下是一个简单的例子,演示如何比较两个表的数据: 如果这些查询返回任何行,那么这些行就是两个表之间的差异…

    2024年7月4日
    2.4K00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信