1
我有一个脚本,它使用exec
命令将STDOUT
和STDERR
重定向到一个文件。该脚本在Solaris 9下正常工作。我在VMware上的Solaris 10上测试它,并在exec
命令中失败。在Shell脚本中重定向STDOUT和STDERR
prog=`basename $0`
log="${LOCLOG}/${prog}$$"
if test -z "$LDDEBUG"
then
exec > ${log} 2>&1
chmod 644 "${log}"
else
set -x
fi
在上面,脚本在该行结束,没有任何错误消息。
我在变量exec > "${log}" 2>&1
附加了引号。这可以让脚本运行到最后,但它不会创建日志文件。
然后,我的文件路径试了一下:
exec > /tmp/blahblah1 2>&1
...和它的工作。它创建了文件并写入了它。但是这并不能解决我的问题,因为必须在脚本中生成日志文件名。
我迷失了这里的解决方案,我知道它可能非常简单,但我不能想到其他任何事情都无需对脚本进行任何重大更改。
====== 输出sh -x
[email protected][60] sh -x /home/hameed/test/local/bin/qikload
+ basename /home/hameed/test/local/bin/qikload
prog=qikload
datefmt=+%H:%M:%S
dayfmt=+%y%m%d
log=/home/hameed/test/local/etc/log/0508/qikload2199
+ test -z
+ exec
=======的
然后我删除了2>&1
跑sh -x
和它去通过该行。失败的
+ basename /home/hameed/test/local/bin/qikload
prog=qikload
datefmt=+%H:%M:%S
dayfmt=+%y%m%d
log=/home/hameed/test/local/etc/log/0508/qikload27213
+ test -z
+ exec
+ chmod 644 /home/hameed/test/local/etc/log/0508/qikload27213
+ date +%H:%M:%S
now=10:44:23
+ echo Log: 10:44:23 Commencing loads
感谢您的回复。那是我做的第一件事。它肯定是集。 – Hameed 2013-05-06 23:09:59
好的:Solaris 10上的'$ LOCLOG'的值有什么特别之处吗?每个系统上的$ LOCLOG的值是多少? '$ LOCLOG'目录的权限有什么不同? 'LOCLOG'是Solaris 10上的文件还是Solaris 9上的目录?哪个用户正在运行这个脚本? NFS挂载的文件系统给用户带来“根源”悲痛的机会吗? – 2013-05-06 23:22:51
以上都不是。我运行的其他程序没有访问和写入问题。当用户登录时,LOCLOG的值每天都在变化:'/ home/hameed/test/local/etc/log/0508' – Hameed 2013-05-07 00:25:10