【问题标题】:Running dotnet through cron on RedHat fails在 RedHat 上通过 cron 运行 dotnet 失败
【发布时间】:2020-04-24 19:54:28
【问题描述】:

我们有一个用于索引一些文件的 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 脚本运行

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

【问题讨论】:

  • 您能分享您尝试的每个步骤的日志/错误消息吗?
  • 另外,这个 crontab 适合普通用户吗?还是以 root 身份?
  • 普通用户的 Crontab。此外,只有错误才是真正的“来源”,不像在脚本中那样工作。
  • 您有机会重试吗?我的回答对你有用吗?是否有助于发现问题?
  • 我们发现了问题,现在发布答案。

标签: .net-core cron rhel rhel7 software-collections


【解决方案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!

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多