zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Python入门教程 超详细1小时学会Python
    K最近邻(KNN,k-Nearest Neighbor)准确理解
    K最近邻(KNN,k-Nearest Neighbor)准确理解
    如何区分数据科学家,数据工程师与数据分析师
    如何区分数据科学家,数据工程师与数据分析师
    【BZOJ】1003 Cards
    TinySpring分析二
    Tomcat 系统架构与设计模式,第 1 部分: 工作原理
    MySQL中使用INNER JOIN来实现Intersect并集操作
    jqPaginator-master | kkpager-master 这两个分页插件的使用方法
  • 原文地址:https://www.cnblogs.com/wangyh702/p/11243097.html
Copyright © 2011-2022 走看看