V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Aura7988
V2EX  ›  问与答

定时任务执行失败

  •  
  •   Aura7988 · 2018-08-01 18:02:19 +08:00 · 1557 次点击
    这是一个创建于 2066 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写了一个脚本来整理 bash 的历史记录:

    #!/usr/local/bin/bash
    
    src=~/.bash_history
    dst=~/Bash/bh.bak
    tmp=~/Bash/tmp.txt
    p='^cd \|^vi \|^vimdiff\|^z '
    cp $src $dst && sed "/$p/d" $dst | tac | awk '!a[$0]++' | tac > $tmp && mv $tmp $src
    

    crontab 设置如下: 52 17 * * * ~/Bash/rmdups.sh &> /dev/null

    发现定时任务每次只会生成一个空的 tmp.txt 文件,但手动执行的话就可以达到预期的效果。这是什么原因啊?

    4 条回复    2018-08-01 22:16:45 +08:00
    sleeperqp
        1
    sleeperqp  
       2018-08-01 18:13:42 +08:00
    个人猜测是 手动执行 ok 的是在个人账户 user 下,crontab 是 root 账户, “~”对应的目录分别不一样 直接用完整的绝对路径试试
    Aura7988
        2
    Aura7988  
    OP
       2018-08-01 21:03:31 +08:00
    @sleeperqp
    如果和~有关系的话,tmp.txt 文件就不会生成了。
    我刚才试了一下,用绝对路径也不行。应该是
    sed "/$p/d" $dst | tac | awk '!a[$0]++' | tac > $tmp
    这条命令没有执行成功,bash 里面重定向的话,首先是先创建文件。
    但为啥在 crontab 里面执行失败,手动就可以执行成功,搞不懂原因。
    greenskinmonster
        3
    greenskinmonster  
       2018-08-01 21:20:02 +08:00   ❤️ 1
    crontab 里的环境变量和用户环境是不一样的,尤其是 path,可以检查一下
    Aura7988
        4
    Aura7988  
    OP
       2018-08-01 22:16:45 +08:00
    @greenskinmonster
    感谢提醒,果真是 path 变量的问题,在脚本里面设置一下 path 就可以了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3292 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:12 · PVG 21:12 · LAX 06:12 · JFK 09:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.