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

  • 相关阅读:
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    449. Serialize and Deserialize BST
    114. Flatten Binary Tree to Linked List
    199. Binary Tree Right Side View
    173. Binary Search Tree Iterator
    98. Validate Binary Search Tree
    965. Univalued Binary Tree
    589. N-ary Tree Preorder Traversal
    eclipse设置总结
  • 原文地址:https://www.cnblogs.com/wangyh702/p/11243097.html
Copyright © 2011-2022 走看看