Windows 开发环境下,使用 node-schedule 管理 Laravel 的任务调度
在 Laravel 中创建计划任务非常容易。 它们也很容易在具有 cron 任务的Linux 或 MacOS 中运行。 但是,最近我在 Windows 上进行了很多开发,并且 Windows 没有 具有 UNIX 风格的 cron 任务。而且,Laravel的文档中没有提及如何在Windows中正确执行此操作。。 我发现这篇有用的文章介绍了如何使用 Task Scheduler 在 Windows 中执行此操作,但是感觉太麻烦了。研究晦涩难懂的 Windows 设置上并不是一个好办法,因为这应该是项目级别而不是系统级别的问题。
因此,我找到了一个简单的解决方法,不仅可以避免使用 Windows Task Scheduler,而且可以避免在 macOS 和 Linux 中使用 crontab! 如果明天要更换开发计算机,或将其他人带入我的项目,那么我将拥有完全跨平台的方法来处理计划的作业,而无需深入研究操作系统: NodeJS 库。
使用 node-schedule
因此,我不确定这是否会使我成为一个不专业的 Laravel 开发人员,因为我没有将该工具构建为 Artisan 命令(甚至不是在PHP中),但是它是目前可用的最有效,最可靠的解决方案,无需进行大量额外的工作。 由于大多数Laravel 开发人员都在使用某种前端工具(例如[Laravel Mix或Webpack),因此我们已经有了Node(也许还有Yarn) 安装在我们的开发机器上,减轻了负担。
t添加 node-schedule
到项目
确保您已经进入 Laravel 项目根目录并根据您要执行的操作运行以下 NPM 或Yarn 命令。
# NPM
npm install node-schedule --save-dev
# Yarn
yarn add --dev node-schedule
创建 JavaScript 文件用于编写计划任务
然后在项目根目录中创建一个 dev-scheduler.js
文件,将一下内容添加进去:
const schedule = require('node-schedule')
const { exec } = require("child_process")
new schedule.scheduleJob('* * * * *', function() {
exec('php artisan schedule:run', function(error, stdout, stderr) {
if (error) console.log(error)
if (stderr) console.log(stderr)
console.log(stdout)
})
})
运行计划任务
使用 node 运行该文件
node dev-scheduler.js
然后...就是这样。 请记住,这不是用于生产。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。