首页 > 解决方案 > 如何从 Dot Net Core API/C# 应用程序触发 cron 作业?

问题描述

我有以下用例。

我们已经在一个持续运行的 Linux 服务器上部署了一个 cron 作业。

现在我们需要通过 API 按需触发这个工作/一些按钮点击事件/。

例如,我们有一个屏幕来获取用户的导出数据请求,一旦用户提出了这个请求,我们需要触发将导出文件并通过电子邮件发送给用户的 cron 作业。导出文件是一个长期运行的过程,这就是我们创建作业的原因。

我有一种解决方案是使用 QuartzNet,但我不想修改或更改作业实现。有什么方法可以从 C# 代码触发这个 cron 作业?

任何帮助将不胜感激。

标签: c#asp.net-web-apicron.net-corecrontrigger

解决方案


cron 作业只是一个 bash 命令。您可以简单地使用与crontab中相同的命令,并使用以下内容调用它:

public static void StartCommand(string cmd)
{
    var escaped = cmd.Replace("\"", "\\\"");

    var process = new Process()
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "/bin/bash", // or whatever shell you use
            Arguments = $"-c \"{escaped}\"",
            UseShellExecute = false,
            CreateNoWindow = true,
        }
    };
    process.Start();
}

示例调用:

SomeClass.StartCommand("exportprocess \"argument\" --example-flag");

当然,根据您的需要,您可以使用process.WaitForExit();、读取标准输出等。


推荐阅读