当前位置: 技术问答>linux和unix
手动可以正常执行的sh ,但是在crontab 中调用不正常
来源: 互联网 发布时间:2016-01-20
本文导语: 我在unix下写了个sh程序,手动执行没有问题,但是在crontab中调用的时候,只能执行其中的类似date的命令,却运行不了里面调用的程序.想请教这是什么问题呢? | 首先, export表示导出某个环境变量,...
我在unix下写了个sh程序,手动执行没有问题,但是在crontab中调用的时候,只能执行其中的类似date的命令,却运行不了里面调用的程序.想请教这是什么问题呢?
|
首先, export表示导出某个环境变量,使之不仅在这个进程中有效,在随后创建的子进程中也能
起作用。
因为我们这里要设置PATH,和LD_LIBRARY_PATH,所以我用export将它们导出。
但我第一次让你用export PATH=...,但却报出了语法错误
/test.sh: PATH=/bin:/u1/tmn/bin/alcol/alcol_lxl: is not an identifier
因此我猜想你的shell不支持这样的语法,所以我让你采用了另一种比较原始
的语法:
PATH=...
export PATH
LD_LIBRARY_PATH=...
export LD_LIBRARY_PATH
其次,因为你的alcol_lxl需要libwsc.so.71才能正常,你在命令行运行的时候
之所以正常,是因为你当前运行的环境中设置好了LD_LIBRARY_PATH这个环境变量,
它告诉shell到哪里去找需要的库文件
而cron job不一样,它是root启动的一个进程,cron job运行的环境并没有设置好
LD_LIBRARY_PATH这个环境变量。所以我让你在程序里面自己参照命令行中的环境
自己定义一次。
起作用。
因为我们这里要设置PATH,和LD_LIBRARY_PATH,所以我用export将它们导出。
但我第一次让你用export PATH=...,但却报出了语法错误
/test.sh: PATH=/bin:/u1/tmn/bin/alcol/alcol_lxl: is not an identifier
因此我猜想你的shell不支持这样的语法,所以我让你采用了另一种比较原始
的语法:
PATH=...
export PATH
LD_LIBRARY_PATH=...
export LD_LIBRARY_PATH
其次,因为你的alcol_lxl需要libwsc.so.71才能正常,你在命令行运行的时候
之所以正常,是因为你当前运行的环境中设置好了LD_LIBRARY_PATH这个环境变量,
它告诉shell到哪里去找需要的库文件
而cron job不一样,它是root启动的一个进程,cron job运行的环境并没有设置好
LD_LIBRARY_PATH这个环境变量。所以我让你在程序里面自己参照命令行中的环境
自己定义一次。