脚本命令作为su -c命令运行时缺少文件输出-m user

时间:2016-11-11 16:38:36

标签: linux shell

我有一个脚本需要检查是否存在只有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

1 个答案:

答案 0 :(得分:0)

尝试重定向行中的stoutstderr的输出:

su -c "/opt/qa-scripts/start-qa-test.sh > /var/log/qaTests/test-$(date +\"m-%d-%T\".log" -m "qaUser" 2>&1