【问题标题】:Why cronjob writing outside public_html by default?为什么cronjob默认在public_html之外写?
【发布时间】:2018-08-08 04:14:50
【问题描述】:

我在我的 public_html 文件夹名称 cron.php 中为一个文件定义了一个简单的 cronjob,这个文件只是每分钟将当前日期时间插入到 log.txt 文件中。

/usr/local/bin/php -f /home/{{user}}/public_html/cron.php >/dev/null 2>&1

这每分钟都在工作,但是;

cron.php 位于/home/{{user}}/public_html/cron.php

cron.php 中,$filename 的值如下:

$filename= "log.txt";

如果我直接进入浏览器并输入http://www.sitename.com/cron.php 它正在将当前日期时间写入 log.txt 文件并正常工作。

crontab 每分钟都在做同样的事情,但是,如果这个脚本触发了 通过 cron 服务 log.txt 文件写入/home/{{username}}/ 文件夹,

所以在 public_html 之外。

怎么可能,我该如何解决这个问题?

注意:如果我将文件名值更改为$filename = "/home/{{user}}/public_html/log.txt";,那么它会再次起作用。但我不想指定完整路径,我需要在同一文件夹中创建一个log.txt 文件。

【问题讨论】:

  • 因为工作目录不同。使用__DIR__
  • 指定文件的完整路径

标签: php server cron centos


【解决方案1】:

这是因为您的 Cron 工作目录与您的 http 服务器不同。只需将您的 crontab 更改为:

cd  /home/{{user}}/public_html ; /usr/local/bin/php -f /home/{{user}}/public_html/cron.php >/dev/null 2>&1

或者恕我直言,更好的解决方案是将其更改为:

wget -q -O /dev/null http://{{your website}}/~{{your username}}/cron.php 

【讨论】:

  • 第一个 cd 命令有效,谢谢。但是是否可以根据用户动态更改 cron 工作目录?
  • 尝试使用 cd ${HOME}/public_html ;
猜你喜欢
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2019-06-11
  • 1970-01-01
相关资源
最近更新 更多