这次尝试用 .NET5 在 Linux 做 Console 排程器并定期发送每日剩余零花钱讯息到我跟家人的手机,突破点在之前都是架设在 windows server 并使用 windows task scheduler
或是 Quartz.NET 定期运行 .net console exe。
第一步 : 个人推荐使用 GCP 的微型方案 ubuntu VM (1vCPU + 0.6GB 记忆体的方案) 架设Linux Server,原因在免费
又有完整的VM环境,足够我们拿来跑一些简单小排程器。
第二步 : 写好我们的 .net5/core console,假如逻辑简单又不计较时间误差、不想添加其他依赖,可以使用 while + threadsleep 排程作法,如:
using System;
using System.Threading;
namespace ScheduleRunOnLinuxConsole
{
class Program
{
static void Main(string[] args)
{
while(true)
{
Console.WriteLine("Sent Message");
Thread.Sleep(TimeSpan.FromSeconds(5));
}
}
}
}
除此外建议使用像是 Quartz.NET 套件安排排程时间。
第三步 : dotnet cli build 打包
dotnet publish -c Release -r linux-x64
.NET 5 预设 self-contained 为 true,优点是可以方便直接运行,但大小多增加几十MB
假如GCP上面有安装 .NET SDK/Runtime 环境可以加上--self-contained false
,减少档案大小
dotnet publish -c Release -r linux-x64 --self-contained false
第四步 : 接着打包成 zip文件藉由 GCP cloud shell 上传到 VM
并使用 unzip
指令解压缩
第五步 : 使用 chmod -R 755 路径
添加运行权限,否则会出现图片 Permission denied 错误
添加权限後测试运行结果
第六步 : 接着会发现假如 shell 关闭,运行的 console 也会跟着中断
,所以要使用 unsup..&
放到後台运行,另外使用 > 路径 2>&1
保存log纪录。
$nohup dll路径 > 保存log路径.log 2>&1 &
类似 windows scheduler,可以借助本身系统来安排排程,好处是每次运行完 console 就释放资源,语法使用灵活的 cron。
举例 :
将上面范例代码删除 while
using System;
using System.Threading;
namespace ScheduleRunOnLinuxConsole
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Sent Message");
}
}
}
并藉由 crontab 每分钟跑一次 console 指令如下:
$ crontab -e
*/1 * * * * 运行路径
Tag:随意刷-每月挑战(2021.09.21) Source: 485. Max Consecut...
正文 今天要来安装Kubernetes上的NFS provisioner,主要就是搭配我的DS718...
昨天计画要做以下三个内容: 1.所有栏位的位置(保留中文的栏位名称即可) 2.日期资料格式(因为资料...
决定转职到 UX/UI 设计的这个过程,花费了不少的时间。 知道自己的作品中,纯设计相关的工作,占了...
阿嬷都看得懂的 CSS 微互动元件 今天我们要来做动态绘本! https://www.youtube...