【问题标题】:How to undo or stop php artisan schedule:run如何撤消或停止 php artisan schedule:run
【发布时间】:2020-01-03 07:45:20
【问题描述】:

这是在我的 Laravel 5.3 开发环境中

我正在测试预定的电子邮件并运行:

php artisan schedule:run

这很好,并且正在按预期发送电子邮件。

但我实际上希望在 crontab 文件中使用它:

 * * * * * php /home/test/website/artisan schedule:run >> /dev/null 2>&1

自从我在 crontab 文件中添加该行后,我收到了两封电子邮件。我删除了这条线,所以现在只收到一封电子邮件。

但现在我想反转/撤消/停止/杀死那个 php artisan schedule:run 以便我可以从 crontab 文件中控制计划。

看到这篇文章:Stop a Laravel scheduled command once started?

但是当我收到消息时,接受的答案( ps -fe | grep artisan and kill PID )对我不起作用:

kill: (PID) - No such process

每次跑步

ps -fe | grep artisan 

它似乎有不同的 PID - 不知道我在这做错了什么。

我也停止了我的流浪盒子,但这似乎没有任何效果。

任何建议都会很棒!


更新:以防万一将来我碰巧遇到同样的问题并再次偶然发现这个 SO 帖子 - 我无法解决这个问题并决定不再值得花更多时间来解决它 - 将现在就忍受它。通过从 crontab 中删除该行,我只收到一封电子邮件,所以现在一切都很好。

【问题讨论】:

    标签: php laravel laravel-artisan


    【解决方案1】:

    您可以创建一个工匠命令,如

    1. custom_schedule:process {type} 将存储类型,即 reverse/undo/stop/kill 在存储中的计划文件中
    2. custom_schedule:run 将访问存储中的计划文件以获取类型,然后相应地运行 Artisan::command('schedule:run')

    然后将 crontab 更改为 * * * * * php /home/test/website/artisan custom_schedule:run >> /dev/null 2>&1

    【讨论】:

    • 感谢 Ankith,这听起来非常棒。我不在我的机器旁,但我会尽快尝试并发布更新。
    【解决方案2】:

    kill: (PID) - 没有这样的进程

    我也停止了我的流浪盒子,但它似乎没有任何 效果。

    您检查过主机内部吗?因为这看起来您一直在主机内运行 artisan 和 crontab 两者或其中之一,而不是在 vagrant box 内。

    【讨论】:

    • 谢谢,据我所知,我只在 vagrant 中运行 artisan 和 crontab。我从同一个终端实例将“php artisan schedule:run”和“crontab - e”运行到vagrant。不过,我会看看我能进一步了解什么。
    【解决方案3】:

    您是否在代码中尝试过这个?没有重叠() 为了防止任何重叠。

    $schedule->command('emails:send')->withoutOverlapping()

    【讨论】:

    • 谢谢,这确实解决了重复电子邮件的问题 - 只是仍然对如何完全停止所有计划感到好奇。我想我只是不喜欢我无法控制的东西在运行的想法
    猜你喜欢
    • 2018-07-18
    • 2019-06-10
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多