【问题标题】:How to use env .bashrc variables on crontab?如何在 crontab 上使用 env .bashrc 变量?
【发布时间】:2020-05-08 18:59:32
【问题描述】:

我需要将在我的个人.bashrc 中定义的个人env 变量$FTP111_PASSWD 发送到crontab 执行。 如何在 crontab 上设置环境变量?

我为crontab 执行而创建的名为cron4_etc.sh 的原始shell 脚本是:

#!/bin/bash

cd /myFolder/
ftp -n -i <<EOF
open 101.111.111.111
user myUser "$FTP111_PASSWD"
mget check_*.log
bye
EOF

如果我通过终端 ./cron4_etc.sh 执行脚本,它执行得很好,但如果我使用以下 crontab 行启动它

  */20 *     *   *   *     /home/myUser/cron4_etc.sh > /tmp/cron4.log 2>&1

crontab 说

密码:登录错误。\n登录失败。

我尝试使用this suggestion 改进我的脚本,但错误仍然存​​在:

#!/usr/bin/env bash

# set environment
source /home/myUser/.bashrc

cd /tmp/pg_io/PGW
ftp -n -i <<EOF
open 101.111.111.111
user myUser "$FTP111_PASSWD"
mget check_*.log
bye
EOF

PS:我使用的是 Ubuntu 18 LTS,但问题是针对通用 crontab。

【问题讨论】:

  • 您是否查看了this post 尤其是this one 的答案,这解释了在非交互式 shell 中使用 Ubuntu 的默认 .bashrc 的缺陷?
  • 谢谢@amain,有道理。正确的问题似乎是这两个步骤: 1. 我的$FTP_etc_PASSWD 变量最好放在哪里,.bash_profile? 2. 如何在我的 Crontab 脚本中“运行这个地方”? ...或者最好的放在/etc/environment

标签: cron environment-variables


【解决方案1】:

我最喜欢的解决方案来自Augusto Destrero,他为一个非常相似的问题提供了以下answer

/etc/environment 中设置变量在 Ubuntu 中也适用于我。从 12.04 开始,为 cron 加载 /etc/environment 中的变量。

有些人建议做一个简单的env &gt;&gt; /etc/environment 来附加所有环境变量,但我会小心处理,而是手动查看/etc/environment

【讨论】:

  • 嗨,B--rian,谢谢,很好的线索和解释!你能显示一个脚本吗? (我将复制/粘贴并测试它,我需要一个完整的“傻瓜食谱”).. 需要从 #!/bin/bash 或您必须解释的其他魔法开始。
  • .... 似乎它不是引用答案页面上的最佳答案,最好的是最简单的,并且还与 UBUNTU 20 LTS 一起运行,是一个简单的“添加-l 选项”,见here
  • 嗯,我的解决方案实际上并不需要脚本,我只是说这是我的首选解决方案for Ubuntu,因为它将所有环境变量捆绑在一个位置。 bash -l 也有效,我引用的问题的公认答案也是如此。
  • 糟糕,@amain 请记住,在 crontab 上运行 .bashrc 不是一个好习惯……所以,您的回答显示了最佳选择和一个好习惯。我测试并且 crontab 正在运行 /etc/environment!
猜你喜欢
  • 2020-03-02
  • 2017-05-06
  • 2018-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2021-12-24
相关资源
最近更新 更多