在RedHat上通过cron运行dotnet失败



我们有一个dotnet核心脚本,用于索引一些文件。我们利用RedHat软件系列,以便像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 SDK你的意思是运行.NET Core SDK命令吗?从以下位置安装.NET Core SDK:https://aka.ms/dotnet-download">

以下内容对我有效。不过我使用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文件中:

    #/垃圾桶/垃圾桶echo"test.sh正在运行……"source scl_source enable rh-dotnet31dotnet$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!

我们遇到的问题是只安装了运行时,而没有安装SDK。一旦安装了包含许多其他依赖项的SDK,它就开始工作了。

最新更新