【学习笔记】 .NET 5/Core Console 在 Linux 平台排程运行

这次尝试用 .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

image-20210218174030265

假如GCP上面有安装 .NET SDK/Runtime 环境可以加上--self-contained false,减少档案大小

dotnet publish -c Release -r linux-x64 --self-contained false

image-20210218174532208

第四步 : 接着打包成 zip文件藉由 GCP cloud shell 上传到 VM

image-20210218181320182

image-20210218175024141

并使用 unzip 指令解压缩image-20210218175438453

第五步 : 使用 chmod -R 755 路径 添加运行权限,否则会出现图片 Permission denied 错误

image-20210218175658278

添加权限後测试运行结果

image-20210218175854925

第六步 : 接着会发现假如 shell 关闭,运行的 console 也会跟着中断,所以要使用 unsup..& 放到後台运行,另外使用 > 路径 2>&1 保存log纪录。

$nohup dll路径 > 保存log路径.log 2>&1 &

image-20210218180234190

Ubuntu Cron 排程器做法

类似 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 * * * * 运行路径 

image-20210218182415631


<<:  什麽是帕累托图?(20/80法则)

>>:  【左京淳的JAVA学习笔记】第一章 JAVA基础

Day 7: LeetCode 485. Max Consecutive Ones

Tag:随意刷-每月挑战(2021.09.21) Source: 485. Max Consecut...

Day17,NFS provisioner

正文 今天要来安装Kubernetes上的NFS provisioner,主要就是搭配我的DS718...

[Tableau Public] day 22:台湾姓氏分布-修改原始资料

昨天计画要做以下三个内容: 1.所有栏位的位置(保留中文的栏位名称即可) 2.日期资料格式(因为资料...

003-转职

决定转职到 UX/UI 设计的这个过程,花费了不少的时间。 知道自己的作品中,纯设计相关的工作,占了...

[Day 25] 阿嬷都看得懂的 CSS 微互动元件

阿嬷都看得懂的 CSS 微互动元件 今天我们要来做动态绘本! https://www.youtube...