【问题标题】:Missing File Output When Script Command Runs as su -c command -m user脚本命令作为 su -c command -m user 运行时缺少文件输出
【发布时间】: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

【问题讨论】:

    标签: linux shell


    【解决方案1】:

    尝试重定向stoutstderr的输出:

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

    【讨论】:

      猜你喜欢
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 2021-09-08
      • 1970-01-01
      • 2015-04-17
      • 2010-10-17
      相关资源
      最近更新 更多