0

我们有一个 dotnet 核心脚本,用于索引一些文件。我们利用 RedHat Software Collection,因此像 dotnet 这样的项目可以绑定到我们的 RHEL 设置中。

要运行脚本,我们执行以下操作: source scl_source enable rh-dotnet30 /opt/rh/rh-dotnet30/root/usr/bin/dotnet /d/h/fileprocessor.dll 1

我们想在 cron 中运行它,但我们无法让它工作。我们尝试了以下方法:

  1. 将“source”命令添加到 bash 配置文件中,但这对我们来说似乎并不可靠,并且不能在 cron 事件上运行。
  2. 直接在cron中运行
  3. 在 cron 中将其作为 shell 脚本运行

我们不知所措,似乎我们永远无法让这两个命令一起工作。如果我们不包含源命令,即使在我们的配置文件中,它也不会运行并给我们错误“找不到任何已安装的 .NET Core SDKs 你的意思是运行 .NET Core SDK 命令吗?安装一个 .NET Core SDK 来自: https ://aka.ms/dotnet-download "

4

2 回答 2

1

以下对我有用。我正在使用rh-dotnet31(.NET Core 3.1),因为rh-dotnet30(.NET Core 3.0)不支持:

  1. 安装包:

    $ sudo yum install rh-dotnet31 -y
    
  2. 从已知目录开始

    $ cd ~
    
  3. 为 .NET Core 源代码创建一个目录以供使用

    $ mkdir hello
    $ cd hello
    
  4. 创建一个简单的应用程序进行测试

    $ scl enable rh-dotnet31 bash
    $ dotnet new console
    $ dotnet publish
    $ exit      # this exits from the subshell started from scl enable command above
    
  5. 将构建复制到一个单独的目录中,我们可以在其中运行它

    $ cp -a bin/Debug/netcoreapp3.1/publish ../hello-bin
    
  6. 创建 cron 将调用的脚本

    $ cd ~
    

    并将其放入./test.sh文件中:

    #!/bin/bash
    echo "test.sh 正在运行...."
    源 scl_source 启用 rh-dotnet31
    dotnet $HOME/hello-bin/hello.dll 1
    

    您甚至可以将最后两行 (source...dotnet ...) 组合成scl enable rh-dotnet31 -- dotnet $HOME/hello-bin/hello.dll 1

    然后使其可执行:

    $ chmod +x ./test.sh
    
  7. 设置 crontab 文件

    $ crontab -e
    

    然后在此文件中添加以下行。这个脚本每分钟运行一次。

    * * * * *       $HOME/test.sh >> $HOME/test.cron.log 2>&1
    

在我的机器上,cron 正在运行,所以几分钟后我现在在日志文件中看到了 cron 作业的输出:

$ tail -f test.cron.log                     
test.sh running now....
Hello World!
test.sh running now....
Hello World!
test.sh running now....
Hello World!
test.sh running now....
Hello World!
test.sh running now....
Hello World!
于 2020-04-28T21:50:01.040 回答
0

我们遇到的问题是只安装了运行时,而不是 SDK。一旦安装了包含许多其他依赖项的 SDK,它就可以正常工作了。

于 2020-05-28T11:55:38.643 回答