root运行cron任务无法读取www-data用户生成的.txt文件

时间:2013-09-16 19:11:59

标签: linux bash cron root

我有一个简单的php页面,可以将文件写入我的服务器。

// open new file
     $filename = "$name.txt";
    $fh = fopen($filename, "w");
    fwrite($fh, "$name".";"."$abbreviation".";"."$uid".";");
    fclose($fh);

然后我有一个cron工作,我知道以root身份运行测试并且需要它。

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

cronjob是一个bash脚本,可以检测文件是否存在,但它似乎无法读取文件的内容。

#!/bin/bash


######################################################
#### Loop through the files and generate coincode ####
######################################################
for file in /home/test/customcoincode/queue/*
    do
    echo $file
    chmod 777 $file
    echo "read file"

    while read -r coinfile; do
      echo $coinfile
    echo "Assign variables from file"

#############################################
#### Set the variables to from the file #####
#############################################

    coinName=$(echo $coinfile | cut -f1 -d\;)
    coinNameAbreviation=$(echo $coinfile | cut -f2 -d\;)
    UId=$(echo $coinfile | cut -f3 -d\;)

    done < $file

    echo "`date +%H:%M:%S` - $coinName : Your Kryptocoin is being compiled!"

    echo $file

    echo "copy $coinName file to generated directory"

    cp -b $file /home/test/customcoincode/generatedCoins/$coinName.txt

    echo "`date +%H:%M:%S` : Delete queue file"

#   rm -f $file



done

echo $file识别文件存在

echo $coinfile为空

然而,当我在终端中nano ./coinfile.txt可以清楚地看到那里有文字

我运行ls -l,我发现该文件具有权限

-rw-r--r-- 1 www-data www-data

我的印象是,这仍然意味着该文件可以被其他用户读取? 如果我打开它并阅读内容,我是否需要能够执行该文件?

任何建议都将不胜感激。如果你愿意的话,我可以展开并显示我的代码,但是在我调用bash脚本来编写文件之前它正在工作......那时它会在root用户下用rwx保存文件,然后可以读取。但这导致了php页面中的其他问题,所以不是一个选项。

1 个答案:

答案 0 :(得分:2)

你有:

 while read -r coinfile; do
 ...

我认为没有迹象表明您正在阅读$file。命令

read -r coinfile

将简单地从标准输入读取(-r仅影响反斜杠的处理)。在cron作业中,如果我没记错,标准输入为空或不可用,这可以解释为什么$coinfile为空。

如果您确实从$file进行了阅读 - 例如,如果您的真实代码如下所示:

while read -r coinfile; do
    ...
done <$file

然后你需要向我们展示你的整个脚本,或者至少是展示问题的自包含版本。实际上,您需要向我们展示您的整个脚本是否存在问题。

http://sscce.org/