bash 脚本不能通过 crontab 工作
Posted
技术标签:
【中文标题】bash 脚本不能通过 crontab 工作【英文标题】:bash script doesn't work through crontab 【发布时间】:2017-10-27 01:59:17 【问题描述】:我正在运行一个将文件传输到我的 AWS 存储桶的 bash 脚本。如果我通过终端运行 bash 脚本,它可以正常工作(通过 ./myBash.sh)。 但是我把它放在我的 crontab 中但它不起作用。这是我的 bash 脚本
#!/bin/bashs3cmd put /home/anonymous/commLogs.txt s3://myBucket/
回声传输完成
echo 现在列出 s3 存储桶中的文件
s3cmd ls s3://myBucket/
回声检查
这是我的 crontab-
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
46 13 * * * /bin/bash myBash.sh
这是我已经尝试过的事情的清单 -
1)尝试使用节点应用程序运行 crontab 以测试 crontab 是否正常工作(答案是肯定的)
2) 尝试在没有 SHELL 和 PATH 的情况下运行 crontab
3) 尝试使用 sudo (46 13 * * * sudo myBash.sh) 从 cron 运行 bash 脚本
4)尝试在没有 /bin/bash 的情况下运行 bash
5) 在网上搜索了很多网站的答案,但没有满意的结果
谁能帮我解决这个问题?(我运行的是 Ubuntu 14.04)
【问题讨论】:
您是否将脚本的标准输出从 cron 输出到文件中,该文件的内容是什么? (46 13 * * * /bin/bash myBash.sh > /home/anonymous/cron_out.txt
)
这个脚本只是为了测试那个 crontab 是否正在执行 bash。所以 txt 文件的内容只是“abcdefgh”
所以你没有。您是否像上面一样在 cron 中排除了脚本的路径?
bash 脚本是 /bin 文件夹
如果它在路径中,使用chmod
赋予它执行权限,并从crontab
中删除/bin/bash
部分,即。 46 13 * * * myBash.sh
.
【参考方案1】:
对于任何来到这篇文章的人。 我遇到了同样的问题,原因是 crontab 在 root 用户下运行,而 s3cmd 是在 ubuntu 用户下配置的。 所以需要将 .s3cfg 复制到根目录
cp -i /home/ubuntu/.s3cfg /root/.s3cfg
【讨论】:
【参考方案2】:经过很长时间得到同样的错误,我只是这样做了:
SHELL=/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin
* * * * * /bin/bash /home/joaovitordeon/Documentos/test.sh
【讨论】:
这个答案应该被接受,因为问题是脚本路径不完整。以上是关于bash 脚本不能通过 crontab 工作的主要内容,如果未能解决你的问题,请参考以下文章