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库更简单:
要是你的API需要认证(比如API Key或者Bearer Token),记得在请求头里带上对应的信息,别让请求被拦下来。import requests api_url = "https://your-app-service.azurewebsites.net/api/update-txt" response = requests.post(api_url) response.raise_for_status()
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
相关产品推荐
相关产品推荐

