【问题标题】:cron job does not read & write to log file when executed the cron执行 cron 时,cron 作业不会读取和写入日志文件
【发布时间】:2020-05-08 08:53:24
【问题描述】:

我不熟悉使用 cron 作业,但我已经学习了基础知识。我可以使用 cron 选项卡调用 php。 手动运行时,将执行代码。但是当它从 cron 作业运行时,php 无法读取日志文件。

$log = 'text.log';  
$saved = 10; 
$deleted_line = count(file($log))-$saved; 
$chk_size = filesize($log)/1024;
if($chk_size >= 2048) {
 $total_lines = file($log);  
    $final_lines = array_slice($total_lines, $deleted_line);
    $file = fopen('amrut-all-projects.log', 'w');
    $result = fwrite($file, implode('', $final_lines));
    fclose($file); 
    }  else { 
       echo 'Your File size less then 5kb.'; 
} 

【问题讨论】:

  • 确保你知道进程在谁的权限下被执行,在哪个目录下。这可能不是您所期望的。
  • 在此处添加您的 cron 命令,这会有所帮助。
  • 检查php脚本和日志文件的所有者和权限。
  • /usr/local/bin/php /home/moud/public_html/amrut/schedular/test-amrut-all-projects.php 你好

标签: php


【解决方案1】:

也许你指定了错误的路径。

试试这个

/path/to/php -f /path/to/script.php >> /path/to/logfile.log

【讨论】:

  • 哇 Greate.... AWSOME Abhishek Mishra 感谢您对先生的大力支持
【解决方案2】:

@Amadan 给了你一个正确的提示。下面你有步骤做什么:

ls -ld folder_u_try_to_save_to/

这将显示哪些用户和组有权访问您的目标文件夹。如果是 your_user 则尝试使用以下命令运行 cron:

su -l your_user -c 'crontab -e'  

如果它工作正常,请查看这个答案 => How to specify in crontab by what user to run script?
关于如何为特定用户创建 cron 选项卡并将此用户添加到有权访问您尝试将数据保存到的文件夹的组中。

【讨论】:

  • 嗨 Fistley 我使用浏览器手动点击了 cron 文件,我得到了输出。但是当我使用 cron 文件运行时,它不会读取日志文件。请检查这是我的 cron 命令。 $file_log = '/usr/local/bin/php /home/moud/public_html/amrut/schedular/test-amrut-all-projects.php ';
  • 如果它通过浏览器运行,那么您应该以 www-data 用户身份运行它。我看到你直接调用它,试试这个: sudo -u www-data /usr/local/bin/php /home/moud/public_html/amrut/schedular/test-amrut-all-projects.php 显然你需要有sudoers 中的 sudo 访问权限。
  • 嗨,我可以使用这个命令吗($file_log = -u www-data /usr/local/bin/php /home/moud/public_html/amrut/schedular/amrut-all-projects.log)如果我正在使用此命令,那么我将无法访问文件数据,请帮助我们。 $file_log = 'www-data/usr/local/bin/php/home/moud/public_html/amrut/schedular/amrut-all-projects.log'; $res = 文件($file_log);回声'
    '; print_r($res);死;
  • 请回复。
  • 'ls -al amrut-all-projects.log' 的输出是什么?
【解决方案3】:

首先请使用浏览器手动点击 CRON 文件。如果输出完美,那么不要担心你的代码。尝试检查 CRON 设置。

【讨论】:

  • 嗨 Fistley 我使用浏览器手动点击了 cron 文件,我得到了输出。但是当我使用 cron 文件运行时,它不会读取日志文件。请检查这是我的 cron 命令。 $file_log = '/usr/local/bin/php /home/moud/public_html/amrut/schedular/test-amrut-all-projects.php ';
  • 你能告诉我我应该在 CRON 设置中检查什么。