mybuilder/cronos

通过PHP配置cron任务

4.0.0 2023-01-03 16:44 UTC

This package is auto-updated.

Last update: 2024-08-30 01:20:03 UTC


README

通过PHP轻松配置cron。

如果您使用Symfony 4/5/6,可以使用我们的酷.bundle,通过花哨的注解来配置您的应用工作!

设置和配置

通过composer引入库

composer require mybuilder/cronos

用法

构建Cron

<?php

require 'vendor/autoload.php';

$cron = new MyBuilder\Cronos\Formatter\Cron;
$cron
    ->header()
        ->setPath('path')
        ->setHome('home')
        ->setMailto('test@example.com')
        ->setShell('shell')
        ->setContentType('text')
        ->setContentTransferEncoding('utf8')
    ->end()
    ->comment('Comment')
    ->job('/bin/bash command --env=dev')
        ->setMinute(1)
        ->setHour(2)
        ->setDayOfMonth(3)
        ->setMonth(4)
        ->setDayOfWeek(5)
        ->setStandardOutFile('log')
        ->appendStandardErrorToFile('error')
    ->end();

echo $cron->format();

这将打印

MAILTO=test@example.com
HOME=home
SHELL=shell
LOGNAME=logName
CONTENT_TYPE=text
CONTENT_TRANSFER_ENCODING=utf8

#Comment
1    2    3    4    5    /bin/bash command --env=dev > log 2>> error

更新Cron

<?php

require 'vendor/autoload.php';

use MyBuilder\Cronos\Formatter\Cron;
use MyBuilder\Cronos\Updater\CronUpdater;

$cron = new Cron;
// $cron configuration...

$cronUpdater = CronUpdater::createDefault();
$cronUpdater->replaceWith($cron);

故障排除

  • 当前用户必须有一个现有的crontab文件才能使用更新器,使用crontab -e来创建一个。
  • 当cron行被执行时,它将以拥有crontab的用户执行,但它不会执行任何用户的默认shell文件,所以所有路径等都需要在cron行调用的命令中指定。
  • 如果您没有在/etc/passwd中可用的shell,您的crontab将不会执行。
  • 如果您的作业似乎没有运行,请检查cron守护进程正在运行,同时检查您的用户名是否在/etc/cron.allow中,而不是在/etc/cron.deny中。
  • 环境变量替换不起作用,您不能使用像$PATH$HOME~/sbin这样的东西。
  • 您不能在命令中使用%,如果您需要使用它,请使用反引号转义命令。

MyBuilder创建 - 查看我们的博客,了解更多关于这个以及其他我们发布的开源项目的细节。