我对 Drupal 还很陌生,我的任务是设置一个每小时运行一次的 cron 作业。我有 php 文件,它生成将在不同站点上使用的 xml 文件。
我的问题是:我是否将 mycron.php 放在根目录中(与 cron.php 相同)并将 crontab 配置为每小时运行 mycron.php ?
任何指导表示赞赏。
您可以在自定义模块中使用 hook_cron() 编写自己的 cron 作业,并使用项目模块 Elysia Cron 进行设置,以了解每个 cron 任务的时间和频率。
最初我带着类似的问题来到这个页面。这基本上就是我发现的。
您不是从 PHP 代码运行 cron 作业,而是从服务器操作系统运行 cron 作业。 Cron 作业只能在 Linux、Unix 或 macOS 中设置,Windows 没有预装 cron 系统。
如果您使用的是 VPS,则可以从操作系统(例如 ubuntu)设置 cron 作业。或者,如果您使用共享托管,您很可能能够从帐户中的管理菜单设置 cron 作业,这取决于您的托管提供商。 您要做的就是在 Drupal 模块
hook_menu 中创建一个端点。菜单中的端点应链接到回调函数,该函数将执行您想要定期运行的操作。
function module_name_menu() {
return [
'path/to/endpoint/%' => [
'title' => t(Menu title),
'description' => 'Some description',
'page callback' => 'name_of_function_to_call',
// Optional argument passed to the callback function, number relates to the position in the path
'page arguments' => [3],
'access arguments' => ['type of access'],
'type' => MENU_CALLBACK,
]
];
}
检查 hook_menu 链接以查看函数返回数组中的元素的作用。
/**
* Cron job callback function
* @param string $param Parameter sent through the url
*/
function name_of_function_to_call($param) {
// Do something with the param and perform some tasks
}
在您要设置的 cron 作业中,您必须将 cron 作业指向端点位置。下面示例中的 cron 作业将在 1 月的每个第一天和 1 月的每个星期一的 4 点 1 分运行(分钟、小时、该月的某天、该月、该周的某天):
01 04 1 1 1 wget -O - -q -t 1 http://siteurl.tld/path/to/endpoint/argument
(来自Drupal 文档
的示例,执行 man wget
来了解 wget 选项的作用)
编辑:
你显然也有hook_cron选项。您将代码放入 ..._cron() {}
函数中,该函数将在页面范围的 cron 作业运行时运行,但不会给您留下很多控制权。