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