在特定目录中运行Cron任务

5
我创建了一个用于生成 RSS 订阅的 PHP 脚本,最终将通过 Cronjob 运行。
所有 PHP 文件和生成的 RSS XML 都将位于网站的子文件夹中。如果我在本地开发机器上使用终端或浏览器在同一目录下运行,则 PHP 脚本可以正常运行。
e.g. php /Library/WebServer/Documents/clientname/siteroot/rss/dorss.php

在Chrome浏览器中导航到dorss.php文件是正常的。

CronJob已执行,但存在错误,与require_once()指定的文件有关,这些文件位于rss相同的文件夹或其子文件夹中,因此找不到它们。

长话短说,需要让Cronjob从与dorss.php文件相同的目录中运行,以便可以正确引用包含文件。

我对设置cronjob的知识非常有限,因此想问一下是否可能(在运行命令之前更改目录)在crontab的同一命令行上完成此操作,如果不行,请问如何实现?

当前的cronjob命令是:

0 0,6,12,18 * * * /usr/bin/php /var/www/vhosts/clientname/stagingsite/rss/dorss.php

谢谢你 John

2个回答

20

你可以切换到你想要的目录,然后通过以下方式在该目录下运行php:

cd /var/www/vhosts/clientname/stagingsite/rss/
&&
/usr/bin/php dorss.php

这比创建bash脚本更容易,以下是结果:

0 0,6,12,18 * * * cd /var/www/vhosts/clientname/stagingsite/rss/ && /usr/bin/php dorss.php

5

我不知道是否有更好的解决方案,但我建议编写一个bash脚本,在执行PHP文件之前切换到正确的目录,并使用cron来执行此脚本。例如:

#!/bin/bash
cd /Library/WebServer/Documents/clientname/siteroot/rss/
php dorss.php

甚至只需这样:
#!/bin/bash
php /Library/WebServer/Documents/clientname/siteroot/rss/dorss.php

将其保存在某个位置并使用cron来运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接