定时任务执行失败

2018-08-01 18:02:19 +08:00
 Aura7988

写了一个脚本来整理 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 文件,但手动执行的话就可以达到预期的效果。这是什么原因啊?

1581 次点击
所在节点    问与答
4 条回复
sleeperqp
2018-08-01 18:13:42 +08:00
个人猜测是 手动执行 ok 的是在个人账户 user 下,crontab 是 root 账户, “~”对应的目录分别不一样 直接用完整的绝对路径试试
Aura7988
2018-08-01 21:03:31 +08:00
@sleeperqp
如果和~有关系的话,tmp.txt 文件就不会生成了。
我刚才试了一下,用绝对路径也不行。应该是
sed "/$p/d" $dst | tac | awk '!a[$0]++' | tac > $tmp
这条命令没有执行成功,bash 里面重定向的话,首先是先创建文件。
但为啥在 crontab 里面执行失败,手动就可以执行成功,搞不懂原因。
greenskinmonster
2018-08-01 21:20:02 +08:00
crontab 里的环境变量和用户环境是不一样的,尤其是 path,可以检查一下
Aura7988
2018-08-01 22:16:45 +08:00
@greenskinmonster
感谢提醒,果真是 path 变量的问题,在脚本里面设置一下 path 就可以了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/476024

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX