在1&1共享主机上运行Cronjob [Laravel]

时间:2018-07-05 15:40:15

标签: php laravel

在Laravel应用程序中,我创建了一个previous question that I asked中定义的计划任务。它实质上是获取数据并更新一些表。

我关注了1&1上有关creating cronjobs的帮助文章。

总结这篇文章时,他说了以下话。

  

要在服务器上设置新cronjob的SSH,请使用 whereis php 查找PHP Binary的位置,然后使用 crontab 命令访问crontab并添加新作业。

     

这将需要PHP路径和要运行的脚本的路径。

问题是当我运行该命令时,我得到以下信息。

  

[用户名]没有crontab

因此,我随后搜索了Google,看来某些共享主机不允许您使用甚至访问crontab。

在我的共享托管服务器上, php-7.1-cli 的路径如下/usr/bin/php7.1-cli

现在,Artisan是Laravel的一部分,并且需要比 \ usr \ bin \ php

中更高版本的PHP。

鉴于此,对于cronjob,我认为我可以做这样的事情:

* * * * * /usr/bin/php7.1-cli /path/to/artisan schedule:run >> /dev/null 2>&1

* * * * * /usr/bin/php7.1-cli /path/to/mynewable/artisan schedule:run >> /dev/null 2>&1

我的文件夹结构如下:

root
    /mynewable

但是当我运行这两个命令时,什么都没有发生。

1&1还具有内置的cron作业创建器,但这仅允许我指定将运行必要脚本的文件的URL路径。

enter image description here

我被禁止使用crontab吗?如果是这样,提供URL似乎不切实际,因为用户不需要进行验证,但是在Web路由中创建一条路径来运行Laravel调度程序似乎有点安全漏洞。

1 个答案:

答案 0 :(得分:-1)

您可以在laravel的公用文件夹中创建可执行文件[DllExport(ExportName = "formshow", CallingConvention = CallingConvention.StdCall)] public static void showForm(IntPtr owner, [MarshalAs(UnmanagedType.LPWStr)]string message) { NativeWindow nativeWindow = new NativeWindow(); nativeWindow.AssignHandle(owner); Form_Wait form = new Form_Wait(); form.label_message.Text = message; form.Show(nativeWindow); } [DllExport(ExportName = "formclose", CallingConvention = CallingConvention.StdCall)] public static void closeForm() { form.Dispose(); }

cron.php

现在您可以致电http://example.org/cron.php

当然,您可以将exec("/usr/bin/php7.2-cli -f /homepages/x/xxxxx/htdocs/artisan schedule:run 2>&1", $out, $result); if(!empty($out)) { echo implode("<br>\n\n", $out); } 放在受保护的目录中,这样没人可以呼叫cron.php