我有一个脚本需要检查是否存在只有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
答案 0 :(得分:0)
尝试重定向行中的stout
和stderr
的输出:
su -c "/opt/qa-scripts/start-qa-test.sh > /var/log/qaTests/test-$(date +\"m-%d-%T\".log" -m "qaUser" 2>&1