Linux:gsutil 在 cron 中不起作用

Posted

技术标签:

【中文标题】Linux:gsutil 在 cron 中不起作用【英文标题】:Linux : gsutil does not work in cron 【发布时间】:2015-01-05 02:21:38 【问题描述】:

我正在尝试在 Linux 中使用 cron 将文件上传到 Google Cloud Storage,但它失败了。 我还在脚本文件中将路径和配置设置为:

PATH=/bin/gsutil/
export BOTO_CONFIG="/home/ashu/.boto"
# rest of script

但仍然没有任何效果。

【问题讨论】:

【参考方案1】:

如果您使用的是 Google Cloud - Compute Engine 提供的默认安装,gsutil 很可能在 /snap/bin 中

PATH=$PATH:/snap/bin

【讨论】:

建议在$PATH 周围加上引号,例如PATH="$PATH":/snap/bin【参考方案2】:

这样做比较安全

PATH="$PATH":/bin/gsutil/

这样您就不会终止对/bin/usr/bin 等常用位置的访问。您可能不会直接使用它们,但您调用的脚本可能会!

更新:@ComputerDruid 正确地指出引号可以防止空格造成麻烦。

【讨论】:

更安全的是PATH="$PATH":/bin/gsutil,尽管在$PATH 中看到带有空格或其他奇怪字符的目录非常罕见【参考方案3】:

除了按照 pjz 的建议修改 PATH 之外,您是否尝试查看 gsutil / cron 的实际输出?

推荐失败的原因是什么?如果您需要捕获 gsutil 的输出, 您可以将标准输出和错误(stdout 和 stderr)重定向到一个文件,并保存在那里。

例如如果您使用的是 Bash,您可以通过将您的 crontab 修改为将输出重定向到 gsutil_log.txt

*/1 * * * * /mypath/myscript.sh >> $HOME/gsutil_log.txt

这将重定向 stdoutstderr 并将任何输出附加到 $HOME 中的 gsutil_log.txt 以供 cron 每分钟调用一次的 myscript.sh

如果输出有帮助,那应该会让你在调试方面有所进步。

【讨论】:

【参考方案4】:

我删除了我的 pip 安装并使用以下链接进行安装: https://cloud.google.com/storage/docs/gsutil_install#specifications.

还应避免在路径和导出中使用 sudo,因为它可能会导致一些问题。

PATH=$PATH:/root/gsutil/
export BOTO_CONFIG="/root/.boto"
# rest of script

以上代码运行良好。

【讨论】:

【参考方案5】:

我在 Ubuntu 20.04 上遇到了同样的问题,我发现最简单的解决方案是在我的 gsutil 安装和系统 bin 文件夹之间创建一个软链接,如下所示:

sudo ln -s /snap/bin/gsutil /usr/bin/gsutil

【讨论】:

【参考方案6】:

您可以尝试使用完整路径 gsutil 命令在 crontab 中使用

/root/gcloud/gsutil cp ...

【讨论】:

以上是关于Linux:gsutil 在 cron 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

@reboot 在 CRON 中不起作用

Ubuntu:Mpsyt 在 cron 中不起作用

cron 资源在 aws opswork 中不起作用?

Cron 工作在每当 gem 中不起作用

相对路径在 cron PHP 脚本中不起作用

Bash + Expect脚本在cron RHEL 7中不起作用