2015-04-16 58 views
0

我有一个脚本,它将在Solaris上使用cronjob在不同的环境中运行。如何在cronjob之前为每个环境设置环境变量。我试图通过启动特定的env。每个cronjob之前的变量,但它没有锻炼。任何人都可以提供一种方式来做到这一点针对不同环境的Cronjob

+0

请告诉我们你尝试过什么。 –

回答

0

您可以在crontab直接分配环境变量,只需添加一行

VAR =价值

这将生效的所有cron作业该机器上的用户。

或者你试过了吗?我不确定会发生什么,如果您尝试多次分配相同的变量,我的猜测是只有最后一个会有效果。

+0

我试图通过在cronjob之前分配变量,并给出了不同环境下所有作业之间的时间间隔,但它并没有为我工作。我做了同样的事情为Linux它工作正常,但同样不工作在Solaris – user1

0

您可以在cron中导出您喜欢的变量或使用多个设置来源文件。接下来的4个crontab项使用不同的环境设置。

10 * * * * export ONEVAR=firstExample; myscript >/dev/null 2>&1 
20 * * * * export ONEVAR=secondExample; myscript >/dev/null 2>&1 
30 * * * * . /home/user2262977/settings3; myscript >/dev/null 2>&1 
40 * * * * . /home/user2262977/settings4; myscript >/dev/null 2>&1 

编辑 另一种解决方案是使用在脚本中的参数(或包装脚本调用脚本)。 crontab的会是什么样子

10 * * * * /home/user2262977/myscript settings1 >/dev/null 2>&1 
20 * * * * /home/user2262977/myscript settings2 >/dev/null 2>&1 
30 * * * * /home/user2262977/myscript settings3 >/dev/null 2>&1 
40 * * * * /home/user2262977/myscript settings4 >/dev/null 2>&1 

和你的脚本将开始与

case $1 in 
"settings1") 
    ONEVAR=firstExample 
    SECONDVAR=firstSomething 
    SERVER=firstServer 
    ;; 
"settings2") 
    ONEVAR=secondExample 
    SECONDVAR=secondSomething 
    SERVER=secondServer 
    ;; 
"settings3") 
    ONEVAR=thirdExample 
    SECONDVAR=thirdSomething 
    SERVER=thirdServer 
    ;; 
"settings4") 
    ONEVAR=somethingCompletelyDifferent 
    SECONDVAR=didntExpectThisOneComing 
    SERVER=stackoverflow.com 
    ;; 
esac 
+0

我已经尝试过创建一个包含所有环境变量的文件,并在脚本运行之前添加到cronjob中,但仍然无法运行。实际上,我在数据库服务器上运行脚本,它以SYSDBA身份连接数据库服务器上有各种各样的实例。还有什么可以做的?这将是一个很好的帮助 – user1

+0

你可以显示你的crontab行吗?这些设置必须在调用脚本时在行中完成,并且必须使用点来源。当你需要ksh的时候,在脚本的shebang行或者在myscript的调用中这样说。 –

+0

“在运行脚本之前添加到crontab中”是什么意思?只有设置变量和运行脚本的另一个作业不会有效。每个cron作业都是完全独立的,并以最小的环境开始。如果每个实例的变量需要不同的值,我建议将其作为参数传递给脚本。 –

相关问题