微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

shell脚本中使用的环境variables在由cron运行时在日志文件中显示为空白

原谅我的无知,但是我对shell脚本以及Linux环境variables的使用有些陌生。

我有一个脚本来执行MysqL数据库的备份。 我在脚本中有以下几行用于logging数据库的成功转储:

output=`date; echo "Database export successful from $ENV_HOSTNAME to $BACKUP_HOSTNAME"` echo $output >> /var/log/errorLog

我在/ etc / profile中定义了variables(ENV_HOSTNAME和BACKUP_HOSTNAME),如下所示:

export ENV_HOSTNAME="env1.somename.com" export BACKUP_HOSTNAME="env2.somename.com"

当我打电话给printenv时,我可以看到列出的这些variables,当我以root身份运行这个脚本时,variables值正确地出现在日志文件中。 但是,当我将此脚本设置为使用cron运行时,variables值不会出现在日志文件中。 我知道脚本运行,因为我可以看到date和string的其余部分,但variables是空的:

如何永久设置Windows环境variables?

访问一个DLL中的全局variables

我将它移动到$ PATH中的另一个文件夹后找不到可执行文件

安全地访问由环境variables标识的目录中的文件

环境variables语言是否具体?

Fri Nov 6 22:31:05 EST 2009 Database export successful from to

我相信我在这里错过了一些简单的事情,所以提前感谢您的帮助。

为没有login的用户设置环境variables

CMD环境variables不在PATHvariables中展开

如何存储 – 在bash脚本的环境variables中排除grep的参数

在C程序之间共享variables值

在使用DBD :: MysqL时需要关于perl错误的帮助

有你的问题:cron不运行/ etc / profile。

cron只有很少的环境设置, 任何你需要的东西,你必须自己设置,所以习惯上有cron调用一个脚本来处理设置,然后是主要的行动。

天儿真好,

当cron执行它只会给你一个最小的env集合。 瓦尔。

一个技巧是创建一个包含你想要设置的变量的shell脚本,然后让所有的cron脚本在启动的时候使用这个脚本。

例如,在正在运行的cron脚本的顶部添加以下内容

. my_cronenv.sh

你的shell脚本my_cronenv.sh应该导出你想为你的cron作业设置的所有变量。

编辑:忘了说,这一个其他的一个巨大的优势是,你只需要改变一个脚本,如果你正在运行你的cronjobs环境的变化,而不必搜索一堆cron脚本来使相同编辑。

还有一件事,就是养成一直指着你的环境的习惯是个好主意。 变种使用大括号。 例如$ {ENV_HOSTNAME}而不是$ ENV_HOSTNAME。

进入这个习惯意味着当你使用环境变量的值时你不会被抓到。 例如,$ {ENV_HOSTNAME} _RSV会像您预期的那样展开,而不是$ ENV_HOSTNAME_RSV。 注意:在某些系统中,一个单独的字母变量可以像预期的那样工作,没有大括号,但是我觉得只要养成这个习惯就好了。 这也使你的意图清楚,任何未来的读者你的shell脚本。

干杯,

shell cron用来运行你的作业不是交互式的,所以它不会自动地产生/etc/profile或类似的文件

一个简单的解决办法是简单地添加

. /etc/profile

在你的脚本开始。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐