我有这样的代码:
set -e
set -x
folderName=$(echo `date +%Y/%m/%d/`);
fileName=x.x.x.x.x.x.x.log
cp x.x.x.x.x.x/$1 $fileName
gzip $fileName
s3cmd put $fileName.gz s3://x.x.x.x.x/$folderName
rm $fileName.gz
如果我像这样运行,这工作正常:
./shell logfilelocation
当我像这样添加到 crontab 时:
* * * * * /home/x.x.x/testing/s3 -f x.x.x.log >> /tmp/mys3Log
我等待着!文件 mys3Log
被创建。但里面没有任何内容!我期望命令执行的结果(因为我在代码中使用了 set -e ; set -x )应该进入 mys3Log 文件,因为我正在进行重定向那里。
但是出了点问题。我对 bash 编程和 cron 很陌生。
我哪里出错了?
提前致谢。
最佳答案
cron
没有与交互式 shell 相同的环境,因此在脚本的开头、shebang 之后添加:
source ~/.bashrc || source /etc/profile
并删除 set -e
以查看发生了什么。
在您的 crontab
中,要记录错误和输出(STDERR
、STDOUT
),您需要执行以下操作:
* * * * * /home/x.x.x/testing/s3 -f x.x.x.log >> /tmp/mys3Log 2>&1
此外,在脚本的第 4 行,您使用的是从未声明的变量 $name
。
最后但并非最不重要的一点是,就像 Janauary 所说的那样,在第一行添加 #!/bin/bash
shegang 并确保您的脚本具有可执行权限。 :chmod +x script.sh
关于bash - 调试我的 cron 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12857907/