You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure App Service定时任务配置:每10分钟调用API并同步文件至FTP

搞定Azure App Service上的定时任务:每10分钟更新文件并同步到FTP

嘿,我来给你拆解这个需求的实现步骤,在Azure生态里有非常贴合的方案,咱们一步步来:

1. 用Azure Functions定时触发器做任务调度

最省心的方式就是用Azure Functions的Timer Trigger,专门对付这种周期性执行的任务。

  • 先在Azure Portal里建一个Function App,选和你的API匹配的运行时(比如.NET、Python都行)
  • 新建Function的时候选Timer trigger,然后把CRON表达式设为0 */10 * * * *——这个表达式的意思就是每10分钟执行一次,注意Azure的CRON是6个字段(秒、分、时、日、月、星期),别和其他工具的5字段搞混了
  • 保存后,这个Function就会自动按周期跑起来了

2. 在Function里调用你的API更新文件

接下来要在Function的代码里加调用API的逻辑,触发txt文件的更新。

  • 举个C#的例子,用HttpClient发请求就行:
    var httpClient = new HttpClient();
    // 替换成你实际的API路由
    var apiUrl = "https://your-app-service.azurewebsites.net/api/update-txt";
    // 根据你的API需求调整请求方法(GET/POST)和参数
    var response = await httpClient.PostAsync(apiUrl, null);
    // 确保请求成功,失败的话会抛出异常方便排查
    response.EnsureSuccessStatusCode();
    
  • 如果是Python,用requests库更简单:
    import requests
    api_url = "https://your-app-service.azurewebsites.net/api/update-txt"
    response = requests.post(api_url)
    response.raise_for_status()
    
    要是你的API需要认证(比如API Key或者Bearer Token),记得在请求头里带上对应的信息,别让请求被拦下来。

3. 把更新后的文件同步到FTP服务器

确认API更新完txt文件后,就该把文件传到FTP了。首先得知道App Service里文件的存放路径:Windows环境是D:\home\site\wwwroot,Linux是/home/site/wwwroot,你根据自己的环境调整路径。

  • C#可以用FtpWebRequest来处理FTP上传:
    // 读取App Service上的目标文件
    var localFilePath = @"D:\home\site\wwwroot\your-file.txt";
    var fileBytes = File.ReadAllBytes(localFilePath);
    
    // 配置FTP请求
    var ftpUrl = "ftp://your-ftp-server/your-target-folder/your-file.txt";
    var ftpRequest = (FtpWebRequest)WebRequest.Create(ftpUrl);
    ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
    // 替换成你的FTP账号密码
    ftpRequest.Credentials = new NetworkCredential("ftp-username", "ftp-password");
    
    // 上传文件
    using (var stream = ftpRequest.GetRequestStream())
    {
        stream.Write(fileBytes, 0, fileBytes.Length);
    }
    
    // 关闭响应
    var ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
    ftpResponse.Close();
    
  • Python用ftplib库也很方便:
    from ftplib import FTP
    import os
    
    # 读取本地文件(App Service里的文件)
    local_file = "/home/site/wwwroot/your-file.txt"
    with open(local_file, "rb") as f:
        file_content = f.read()
    
    # 连接FTP服务器并上传
    ftp = FTP("your-ftp-server-url")
    ftp.login("ftp-username", "ftp-password")
    # 切换到FTP上的目标目录
    ftp.cwd("your-target-directory")
    ftp.storbinary(f"STOR your-file.txt", file_content)
    ftp.quit()
    

4. 权限配置与测试

  • 权限方面:如果Function和App Service在同一个资源组,默认权限足够;要是跨资源组,可能得给Function配置Managed Identity来访问App Service的文件系统。
  • 测试:先手动触发Function,看看API有没有被调用、txt文件有没有更新、FTP服务器有没有收到文件,没问题再让它自动跑。
  • 监控:在Azure Portal的Function App里看日志,要是执行出问题了能快速定位。

备选方案:App Service WebJobs

要是不想单独用Function,也可以用App Service的WebJobs:

  • 写个控制台程序,把调用API和FTP上传的逻辑放进去
  • 打包成zip,上传到App Service的WebJobs里,设置触发方式为定时触发,CRON表达式还是0 */10 * * * *
  • 这个方案适合和App Service绑定在一起的场景,但灵活性不如Function。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 15:47:40