CrontabManager
PHP库以编程为GNU/Linux Cron作业。
它使您能够:
要求
安装
可以使用作曲家安装库。
composer require tiben/crontab-manager ~1.0
用法
该库由三个类组成:
-
CrontabJob是代表Cron工作的实体类。 -
CrontabRepository用于持久/检索您的Cron作业。 -
CrontabAdapter处理crontab中的Cron Jobs持久性。
实例化存储库
为了工作,Crontabrepository需要一个crontabadapter的实例。
$crontabRepository = new CrontabRepository(new CrontabAdapter());
创建新工作并将其持续到crontab
假设您要创建一个新作业,该作业包括每天在23:30启动命令“ DF >> /tmp/df.log”。您可以通过两种方式进行。
-
以纯粹的方式:
$crontabJob = new CrontabJob(); $crontabJob ->setMinutes(30) ->setHours(23) ->setDayOfMonth(\'*\') ->setMonths(\'*\') ->setDayOfWeek(\'*\') ->setTaskCommandLine(\'df >> /tmp/df.log\') ->setComments(\'Logging disk usage\'); // Comments are persisted in the crontab -
使用工厂方法从原始的cron语法字符串:
$crontabJob = CrontabJob::createFromCrontabLine(\'30 23 * * * df >> /tmp/df.log\');
现在,您可以将新的cronjob添加到crontab存储库中,并将所有更改持续到crontab。
$crontabRepository->addJob($crontabJob);
$crontabRepository->persist();
从Crontab存储库中找到特定的cron作业并进行更新
假设我们要修改已经存在的cronjob的小时。找到存在的工作是使用一些正则表达式完成的。将正则施加到整个crontab线上。
$results = $crontabRepository->findJobByRegex(\'/Logging\\ disk\\ usage/\');
$crontabJob = $results[0];
$crontabJob->setHours(21);
$crontabRepository->persist();
从crontab中删除克朗工作
您可以删除这样的工作:
$results = $crontabRepository->findJobByRegex(\'/Logging\\ disk\\ usage/\');
$crontabJob = $results[0];
$crontabRepository->removeJob($crontabJob);
$crontabRepository->persist();
注意:由于Cron作业在内部通过参考匹配,因此必须先前从存储库中获得或以前添加。
与另一个用户的crontab一起工作,而不是运行时用户
此功能使您可以管理启动运行时的用户的另一个用户的crontab。当运行时用户是www-data时,这可能很有用,但是您要编辑的crontab的所有者是您自己的Linux用户帐户。
为此,只需将crontab所有者的用户名作为crontabadapter构造函数的参数。假设您是www-data ,您想编辑用户bobby的crontab:
$crontabAdapter = new CrontabAdapter(\'bobby\');
$crontabRepository = new CrontabRepository($crontabAdapter);
使用这种方式,您将建议您遇到用户权利问题。可以通过使用“ Visudo”编辑您的Sudoers文件来处理这。
如果要允许用户www-data编辑用户bobby的crontab,请添加此行:
www-data ALL=(bobby) NOPASSWD: /usr/bin/crontab
它告诉sudo用户www-data使用sudo将crontab称为用户bobby时不要询问密码
现在,您可以这样访问用户bobby的crontab:
$crontabAdapter = new CrontabAdapter(\'bobby\', true);
$crontabRepository = new CrontabRepository($crontabAdapter);
请注意Crontabadapter构造函数的第二个参数true 。该布尔值告诉Crontabadapter在调用crontab时内部使用sudo 。
启用或禁用Cron工作
您可以通过相应地使用cronjob对象的setEnabled()方法来启用或禁用cron作业:
$crontabJob->setEnabled(false);
在坚持下去时,这将使您的cron工作在crontab中使用# 。
写自己的适配器
此外,如果您无法读取其他用户的crontabs,或者您在没有在执行作业的机器上运行CRON的分布式体系结构,则可以通过实现CrontabAdapterInterface创建任何其他适配器。
然后,您可以使用适配器实例化CrontabRepository 。
单位测试
测试是使用Phpunit编写的,需要5.3版以上的版本。执行测试:
$ phpunit <crontab-library-path>/tests
如果您使用作曲家和安装的Dev依赖性安装了库,则可以使用随附的phpunit作为依赖项执行它们:
$ ./vendor/bin/phpunit <crontab-library-path>/tests
贡献
…欢迎:)
