使用 PHP 创建、编辑和删除 crontab 作业?

2022-08-30 07:15:32

是否可以使用 PHP 创建、编辑和删除 crontab 作业?

我知道如何列出Apache用户的当前crontab作业:

$output = shell_exec('crontab -l');
echo $output;

但是如何使用PHP添加cron作业?“crontab -e”只需打开一个文本编辑器,您必须在保存文件之前手动编辑条目。

如何使用PHP删除cron作业?同样,您必须通过“crontab -e”手动执行此操作。

使用如下所示的作业字符串:

$job = '0 */2 * * * /usr/bin/php5 /home/user1/work.php';

如何使用PHP将其添加到crontab作业列表中?


答案 1

crontab 命令用法

usage:  crontab [-u user] file
        crontab [-u user] [ -e | -l | -r ]
                (default operation is replace, per 1003.2)
        -e      (edit user's crontab)
        -l      (list user's crontab)
        -r      (delete user's crontab)
        -i      (prompt before deleting user's crontab)

所以

$output = shell_exec('crontab -l');
file_put_contents('/tmp/crontab.txt', $output.'* * * * * NEW_CRON'.PHP_EOL);
echo exec('crontab /tmp/crontab.txt');

如果用户具有足够的文件写入权限,则上述内容可用于创建和编辑/追加

删除作业:

echo exec('crontab -r');

另外,请注意,apache以特定用户身份运行,这通常不是root,这意味着除非为apache用户授予特权,否则只能为apache用户更改cron作业。crontab -u


答案 2

我们最近准备了一个迷你项目(PHP>=5.3)来管理私人和单个任务的cron文件。此工具连接和管理 cron 文件,以便您可以使用它们,例如,每个项目。可用的单元测试:-)

命令行示例:

bin/cronman --enable /var/www/myproject/.cronfile --user www-data

来自 API 的示例:

use php\manager\crontab\CrontabManager;

$crontab = new CrontabManager();
$crontab->enableOrUpdate('/tmp/my/crontab.txt');
$crontab->save();

从 API 管理各个任务:

use php\manager\crontab\CrontabManager;

$crontab = new CrontabManager();
$job = $crontab->newJob();
$job->on('* * * * *');
$job->onMinute('20-30')->doJob("echo foo");
$crontab->add($job);
$job->onMinute('35-40')->doJob("echo bar");
$crontab->add($job);
$crontab->save();

github: php-crontab-manager


推荐