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/bash

s3cmd 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 工作的主要内容,如果未能解决你的问题,请参考以下文章

通过 bash 脚本将 bash 脚本添加到 crontab

使用 Bash 脚本添加到 Crontab(如果不存在)

Bash 脚本手动运行,但在 crontab 上失败

crontab 普通用户添加的计划任务不能执行

Bash脚本手动运行,但在crontab上失败

Sendmail 不适用于 crontab (bash)