linux - 当由 cron 运行时,shell 脚本中使用的环境变量在日志文件中显示为空白

标签 linux shell scripting environment-variables

请原谅我的无知,但我对 Linux 中的 shell 脚本和环境变量的使用有些陌生。

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

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

我在/etc/profile 中定义了如下变量(ENV_HOSTNAME 和 BACKUP_HOSTNAME):

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

我可以在调用 printenv 时看到列出这些变量,并且当我运行此脚本(以根用户身份)时,变量值正确显示在日志文件中。但是,当我将此脚本设置为使用 cron 运行时,变量值不会出现在日志文件中。我知道脚本运行是因为我可以看到日期和字符串的其余部分,但变量是空白的:

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

我确定我在这里遗漏了一些简单的东西,所以在此先感谢您的帮助。

最佳答案

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

cron 仅通过少量环境设置启动;您需要的任何其他内容,您都必须自己设置,因此通常让 cron 调用脚本来处理设置,然后执行主要操作。

关于linux - 当由 cron 运行时,shell 脚本中使用的环境变量在日志文件中显示为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1694942/

相关文章:

linux - 无法使用 VS 代码编辑器将文件写入/var/www/html

linux - 空输入字符垃圾邮件 Linux tty

java - 可以在 headless (headless)Linux环境下截图吗?

arrays - 如何精确地将 "grep"与点 "."对齐?

google-apps-script - 如何将数据从一张 Google 工作表复制到另一张工作表的下一个空白行

bash - 通过引用传递参数

scripting - 为什么 pbs(dsh) 将我的任务安排到一个节点上?

c - setpgid 使交互式程序(vim,emacs ... ncurses?)无限循环

android - 在没有 PC/SD 卡的情况下在 android 中运行 shell 脚本/启动 Junit 测试

linux - 试图删除 sendmail 消息