boboldehampsink / cronjob
Craft CMS 的 Cronjob 管理插件
Requires
- composer/installers: ~1.0
- tiben/crontab-manager: ~1.0
This package is not auto-updated.
Last update: 2022-02-01 12:49:10 UTC
README
用于程序化管理 GNU/Linux cronjobs 的 Craft 插件。
已弃用
随着 Craft 3 在 2018 年 4 月 4 日发布,此插件已被弃用。您仍然可以使用它与 Craft 2 一起使用,但建议您使用(并开发)Craft 3 版本。目前,我没有任何这样的计划。
功能
- 在 Craft 中处理您的 cronjobs。
- 创建新的 cronjobs。
- 更新现有的 cronjobs。
- 使用一些 sudo 技巧(见下文)管理除运行时用户之外的其他用户的 cronjobs。
要求
crontab命令行工具(应已安装在您的发行版中)。sudo,如果您想在不遇到权限问题的前提下管理除运行时用户之外的其他用户的 crontab(见下文)
安装
可以使用 Composer 安装此库。
composer require boboldehampsink/cronjob
用法
该插件由三个模型组成
CronjobModel是一个实体模型,代表一个 cronjob。Cronjob_RepositoryModel用于持久化/检索您的作业。Cronjob_AdapterModel抽象化了原始 crontab 的读写。
实例化存储库
为了工作,Cronjob_RepositoryModel 需要一个 Cronjob_AdapterModel 的实例,该实例处理对 crontab 的原始读写。
$crontabRepository = new Cronjob_RepositoryModel(new Cronjob_AdapterModel());
创建新的 cronjob 并将其持久化到 crontab 中
假设您想创建一个新的作业,该作业每天 23:30 启动命令 "df >> /tmp/df.log"。您可以通过两种方式实现。
- 纯面向对象方式
$cronjob = new CronjobModel(); $cronjob->minutes = '30'; $cronjob->hours = '23'; $cronjob->dayOfMonth = '*'; $cronjob->months = '*'; $cronjob->dayOfWeek = '*'; $cronjob->taskCommandLine = 'df >> /tmp/df.log'; $cronjob->comments = 'Logging disk usage'; // Comments are persisted in the crontab
- 使用工厂方法从原始 cron 语法字符串创建
$cronjob = CronjobModel::createFromCrontabLine('30 23 * * * df >> /tmp/df.log');
现在您可以将新的 cronjob 添加到 crontab 存储库,并将所有更改持久化到 crontab 中。
$crontabAdapter = new Cronjob_AdapterModel(); $crontabRepository = new Cronjob_RepositoryModel($crontabAdapter); $crontabRepository->addJob($cronjob); $crontabRepository->persist();
从 crontab 存储库中查找特定的 cronjob 并更新它
假设我们想修改已存在的 cronjob 的小时数。使用正则表达式找到现有作业。搜索是在整个 crontab 行上进行的。
$results = $crontabRepository->findJobByRegex('/Logging\ disk\ usage/'); $cronjob = $results[0]; $cronjob->hours = '21'; $crontabRepository->persist();
从 crontab 中删除 cronjob
您可以像这样删除作业
$results = $crontabRepository->findJobByRegex('/Logging\ disk\ usage/'); $cronjob = $results[0]; $crontabRepository->removeJob($cronjob); $crontabRepository->persist();
注意:由于 cronjobs 是通过引用内部匹配的,因此必须先从存储库中获取或先添加。
与其他用户(而非运行时用户)的 crontab 一起工作
此功能允许您管理除启动运行时用户以外的其他用户的crontab。这在运行时用户是www-data但您要编辑的crontab的所有者是您自己的Linux用户账户时非常有用。
为此,只需将crontab所有者的用户名作为Cronjob_AdapterModel构造函数的参数传递。假设您是www-data,并且您想编辑用户bobby的crontab
$crontabAdapter = new Cronjob_AdapterModel('bobby'); $crontabRepository = new Cronjob_RepositoryModel($crontabAdapter);
使用这种方法,您可能会遇到用户权限问题。这可以通过使用'visudo'编辑sudoers文件来解决问题。
如果您想允许用户www-data编辑用户bobby的crontab,请添加以下行
www-data ALL=(bobby) NOPASSWD: /usr/bin/crontab
这告诉sudo在您调用用户bobby的crontab时不要要求密码
现在,您可以通过这种方式访问用户bobby的crontab
$crontabAdapter = new Cronjob_AdapterModel('bobby', true); $crontabRepository = new Cronjob_RepositoryModel($crontabAdapter);
注意Cronjob_AdapterModel构造函数调用中的第二个参数true。这个布尔值告诉Cronjob_AdapterModel在内部使用'sudo'来读取/写入crontab。
启用或禁用cron作业
您可以通过相应地设置CronjobModel对象的"enabled"属性来启用或禁用您的cron作业
$crontabJob->enabled = false;
这将导致在持久化时在您的crontab中将cron作业前置一个"#"。
待办事项
- 从CP创建ElementType来管理cron作业
变更日志
0.1.1
- 更新依赖关系
0.1.0
- 初始版本,允许您以编程方式管理cron作业