为什么我的 cron 作业不是 运行 我的 PHP 脚本?
Why isn't my cron job Not running my PHP script?
我是 运行ning Ubuntu 16.04 OS 和里面的 LAMPP。我想每分钟安排一个 cron 作业到 运行,并执行一个 PHP 脚本。所以这就是我所做的:
打开终端并输入crontab -e
它在VIM打开了CronTab文件,我按ESC进入INSERT模式,然后写了下面的命令:
* * * * * /opt/lampp/htdocs/Tests/16RunAPHPScriptInCronTab/index.php
然后我按:wq
保存并退出。在终端中收到 installing new crontab
通知。
现在我的实际脚本应该检查 LAMPP 本地服务器中的目录是否存在 .pdf
或 .docx
文件,如果存在,那么它应该做一些进一步的工作,但是自从从那开始,我需要检查 cron 作业是否 actually 运行ning 每分钟。所以我所做的就是让我的脚本这样做:
如果目录中存在扩展名为 .pdf
pr docx
的文件,它将删除它们。 这样我就会知道 cron 作业是否有 运行.
但这好像不行。 .pdf
文件非常多,而且没有被删除。那么我怎么知道我的 cron 作业是否 运行ning 正确?
我学习这件事的来源是this, this, this and this。
<?php
$pdfFileName = 'dumps/*.pdf';
$docxFileName = 'dumps/*.docx';
if ( (count(glob($pdfFileName)) > 0) || (count(glob($docxFileName)) > 0) ) {
/***********************************************/
/*************** if the file exists ************/
/***********************************************/
if (file_exists($pdfFileName)) {
unlink($pdfFileName);
}
if (file_exists($docxFileName)) {
unlink($docxFileName);
}
} else {
echo "File does not exist.";
}
?>
* * * * * php /opt/lampp/htdocs/Tests/16RunAPHPScriptInCronTab/index.php
以下 crontab 条目:
* * * * * /opt/lampp/htdocs/Tests/16RunAPHPScriptInCronTab/index.php
表示 /opt/lampp/htdocs/Tests/16RunAPHPScriptInCronTab/index.php
command 每分钟 运行 就像您在终端中键入此字符串并按 Enter。如果至少满足以下条件之一,该命令将失败:
- 当前用户没有file/directory;
的执行权限
- 该文件不是 shell 脚本,并且未指定 shebang
所以你应该确保脚本对于 运行s crontab 的用户是可执行的,并且文件包含 shebang,例如:
#!/usr/bin/php
或者,运行 通过显式调用 php
可执行文件的脚本:
* * * * * php /opt/lampp/htdocs/Tests/16RunAPHPScriptInCronTab/index.php
如果 php
在 PATH
中不可用,请指定 php
的完整路径,或将适当的路径添加到 PATH
环境变量。最流行的实现允许通过 crontab 设置 PATH
,例如:
PATH=/bin:/sbin:/usr/sbin:/usr/bin:/opt/bin:/usr/local/bin
(在带有命令的条目之前。)
我是 运行ning Ubuntu 16.04 OS 和里面的 LAMPP。我想每分钟安排一个 cron 作业到 运行,并执行一个 PHP 脚本。所以这就是我所做的:
打开终端并输入crontab -e
它在VIM打开了CronTab文件,我按ESC进入INSERT模式,然后写了下面的命令:
* * * * * /opt/lampp/htdocs/Tests/16RunAPHPScriptInCronTab/index.php
然后我按:wq
保存并退出。在终端中收到 installing new crontab
通知。
现在我的实际脚本应该检查 LAMPP 本地服务器中的目录是否存在 .pdf
或 .docx
文件,如果存在,那么它应该做一些进一步的工作,但是自从从那开始,我需要检查 cron 作业是否 actually 运行ning 每分钟。所以我所做的就是让我的脚本这样做:
如果目录中存在扩展名为 .pdf
pr docx
的文件,它将删除它们。 这样我就会知道 cron 作业是否有 运行.
但这好像不行。 .pdf
文件非常多,而且没有被删除。那么我怎么知道我的 cron 作业是否 运行ning 正确?
我学习这件事的来源是this, this, this and this。
<?php
$pdfFileName = 'dumps/*.pdf';
$docxFileName = 'dumps/*.docx';
if ( (count(glob($pdfFileName)) > 0) || (count(glob($docxFileName)) > 0) ) {
/***********************************************/
/*************** if the file exists ************/
/***********************************************/
if (file_exists($pdfFileName)) {
unlink($pdfFileName);
}
if (file_exists($docxFileName)) {
unlink($docxFileName);
}
} else {
echo "File does not exist.";
}
?>
* * * * * php /opt/lampp/htdocs/Tests/16RunAPHPScriptInCronTab/index.php
以下 crontab 条目:
* * * * * /opt/lampp/htdocs/Tests/16RunAPHPScriptInCronTab/index.php
表示 /opt/lampp/htdocs/Tests/16RunAPHPScriptInCronTab/index.php
command 每分钟 运行 就像您在终端中键入此字符串并按 Enter。如果至少满足以下条件之一,该命令将失败:
- 当前用户没有file/directory; 的执行权限
- 该文件不是 shell 脚本,并且未指定 shebang
所以你应该确保脚本对于 运行s crontab 的用户是可执行的,并且文件包含 shebang,例如:
#!/usr/bin/php
或者,运行 通过显式调用 php
可执行文件的脚本:
* * * * * php /opt/lampp/htdocs/Tests/16RunAPHPScriptInCronTab/index.php
如果 php
在 PATH
中不可用,请指定 php
的完整路径,或将适当的路径添加到 PATH
环境变量。最流行的实现允许通过 crontab 设置 PATH
,例如:
PATH=/bin:/sbin:/usr/sbin:/usr/bin:/opt/bin:/usr/local/bin
(在带有命令的条目之前。)