如何在 azure linux 托管的 Web 应用程序上运行 cronjobs?

Jay*_*jay 9 cron azure

在 azure 上的 Linux Web 应用程序上找不到 Crontab 命令,我正在尝试为 Laravel 应用程序安排 cronjob。

我正在尝试为我的 laravel web 应用程序运行一个 cronjob。在线解决方案建议我为此使用 webjobs,在我的情况下它是模糊的,技术人员告诉我这是因为它是 Linux 的原因Web 应用程序,然后我必须使用 crontab 运行 cronjobs。我这样做了,但偶尔我会得到“-bash crontab:找不到命令”,这表明整个配置以某种方式丢失了。

jss*_*Dev 6

当我们通过 ssh 打开应用程序的控制台时,我们会收到警告:

\n
Note: Any data outside '/ home' is not persisted\n
Run Code Online (Sandbox Code Playgroud)\n

因此,在这种情况下,一个可能的解决方案是在应用程序启动时启动一个脚本,以便在每次重新启动后安装 cron 服务,并创建执行 Laravel 调度程序任务所需的工作。我将解释在 Azure Linux Web 应用程序上托管的 PHP + Laravel 应用程序对我有用的内容:

\n

1.创建启动脚本/home/startup.sh:

\n\n
apt-get update -qq && apt-get install cron -yqq\n(crontab -l 2>/dev/null; echo "* * * * * /usr/local/bin/php /home/site/wwwroot/MyAppFolder/artisan schedule:run >> /home/cronresult.txt 2>&1")|crontab\nservice cron start\n
Run Code Online (Sandbox Code Playgroud)\n

注意:请注意,我们指示 PHP PATH 位于 /usr/local/bin/php 目录中。我们将在文件 /home/cronresult.txt 中获得该命令的输出,这将帮助我们调试其执行过程中的任何问题。

\n

2.在我们的azure面板中将\xe2\x80\x98/home/startup.sh\xe2\x80\x99设置为\xe2\x80\x98startup command\xe2\x80\x99,如@HeyMan在他的答案中所示。

\n

3.我们必须重新启动应用程序才能加载启动脚本。

\n


Hey*_*Man 5

创建一个启动脚本,例如start.sh并添加以下内容:

# install & start crontab
apt-get update -y
apt-get install -y cron
echo "* 04-17 * * * your_job.sh" | crontab -
service cron start

# don't forget to start your webapp service at the end of this script, e.g.:
python -m gunicorn your_application:app
Run Code Online (Sandbox Code Playgroud)

然后将 start.sh 作为启动脚本添加到您的 WebApp 中:

在此输入图像描述

注意:这种方法有两个陷阱:

  1. 该脚本必须是可执行的,因此要么使用 unix 安装,chmod 755 start.sh要么使用 git 命令(请参阅SO)。
  2. 3pp(此处为 crontab)在每次启动时安装,因此在启动 Web 应用程序时您依赖于外部服务器/存储库。


小智 0

您可以考虑在Linux上使用函数:https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-azure-function-azure-cli-linux

有一个关于此的反馈帖子 - https://feedback.azure.com/forums/169385-web-apps/suggestions/32437156--linux-to-support-webjob-feature-on-webapp-for-co

您可以将 Web 应用程序用于具有 docker 自定义映像的容器以及您的Cron Jobs。此外,如果您为容器的 Web 应用程序启用 AlwaysOn,alwaysOn pinger 将使容器保持运行。

此外,根据您的要求,您可以考虑使用 Azure 应用服务 Windows 容器(预览版),并且在 Windows 容器内您可以运行自定义软件,例如 WebJobs 运行时。您可以在此处按照快速入门在应用服务中运行 Windows 容器:https://learn.microsoft.com/en-us/azure/app-service/app-service-web-get-started-windows-container


归档时间:

查看次数:

14512 次

最近记录:

3 年,8 月 前