【问题标题】:Setting var env with bash script load by cron使用 cron 加载的 bash 脚本设置 var env
【发布时间】:2021-12-21 16:28:57
【问题描述】:

我希望能够在 crontab 中每小时播放一个脚本,同时调用以前在系统启动时定义的环境变量(类似于:export EXTENRALIP=0 在 /etc/profile 等文件中。这个环境变量将是由此脚本修改,该值将在下一次轮换时检索。 我尝试这样做,但导出值不会改变变量

rotation.sh

#!/bin/bash

LOGFILE=/var/log/dns.log

. livebox.sh
. network.sh
. dns.sh


# Grab the var env
IPWAN=$(echo $EXTERNALIP)

# Grab the IPWAN
IP=$(get_livebox_ip)

# Set the var env if changed
if [ "$IPWAN" != "$IP" ]
    export EXTERNALIP=$IP

【问题讨论】:

  • /etc/profile 在系统启动时不运行。它是在您登录时由您的~/.profile 加载的。
  • if [ ... ] export ... 语法无效。你错过了thenfi

标签: bash cron


【解决方案1】:

就像 dan 提到的那样,我认为这不可能。

考虑从磁盘写入和读取数据。

echo "$IP" > /somewhere/externalip
IPWAN="$(cat /somewhere/externalip)"

【讨论】:

  • 谢谢你,就这么简单,我有时候白费力气
【解决方案2】:

做不到。

不管 cron 作业不继承任何现有环境这一事实,脚本的环境在退出时都会消失。即使没有 cron,这也行不通。

您可以使用 shebang #!/bin/bash -l 让您的脚本源 /etc/profile,或在 crontab 中使用 EXTERNALIP=0 /path/to/rotation.sh,但除了每个作业的环境之外,您永远不能在任何地方更新变量。

您可能正在采购脚本以使其在您的 shell 中工作,但每个 cron 作业都是一个新的 shell,当作业完成时,它的环境就消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 2022-06-13
    • 2021-07-23
    • 2013-06-20
    • 1970-01-01
    • 2021-09-27
    • 2022-01-24
    相关资源
    最近更新 更多