【发布时间】:2016-11-11 16:38:35
【问题描述】:
我有一个脚本需要检查是否存在只有 root 才能访问的锁定文件,然后该脚本运行需要以不同用户身份运行的实际测试脚本。
问题是测试脚本应该生成 xml 文件,而这些文件不存在。 (又名我找不到它们)
脚本的相关部分
if (mkdir ${lockdir} ) 2> /dev/null; then
echo $$ > $pidfile
trap 'rm -rf "$lockdir"; exit $?' INT TERM EXIT
if [ -f "$puppetlock" ]
then
su -c "/opt/qa-scripts/start-qa-test.sh > /var/log/qaTests/test-$(date +\"m-%d-%T\".log" -m "qaUser"
lockdir 是在运行测试时创建的,表示测试过程已经开始。
puppetlock 通过查找 puppet 创建的锁定文件来检查 puppet 是否正在运行。
qaUser 无权检查puppetlock 是否存在。
start-qa-test.sh 最终调用 java 来执行自动化测试。我的test-date.log 文件显示了如果运行测试,控制台会看到什么。
但是,测试应该在名为target 的目录中生成一些 xml 文件。这些文件丢失了。
如果相关 start-qa-test.sh 试图运行类似这样的东西
nohup=true
/usr/bin/java -cp .:/folderStuff/$jarFile:/opt/folderResources org.junit.runnt.JUNITCore org.some.other.stuff.Here
运行 start-qa-test.sh 在目标文件夹中生成 xml 输出。但是通过su -c 运行它不会。
编辑
我想出了这个问题的答案。
我把线改成
su - qaUser -c "/opt/qa-scripts/start-qa-test.sh > /var/log/qaTests/test-$(date +\"m-%d-%T\".log"
这允许输出显示在 /home/qaUser
【问题讨论】: