我们有一个dotnet核心脚本,用于索引一些文件。我们利用RedHat软件系列,以便像dotnet这样的项目可以绑定到我们的RHEL设置中。
要运行脚本,我们执行以下操作:
source scl_source enable rh-dotnet30
/opt/rh/rh-dotnet30/root/usr/bin/dotnet /d/h/fileprocessor.dll 1
我们想在cron中运行它,但我们无法使它发挥作用。我们尝试了以下方法:
- 将'source'命令添加到bash配置文件中,但这对我们来说似乎不可靠,而且不会在cron事件上运行
- 直接在cron中运行
- 在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(不支持:
-
安装软件包:
$ sudo yum install rh-dotnet31 -y
-
从已知目录开始
$ cd ~
-
为.NET Core源代码创建一个目录以使用
$ mkdir hello $ cd hello
-
创建一个用于测试的简单应用程序
$ scl enable rh-dotnet31 bash $ dotnet new console $ dotnet publish $ exit # this exits from the subshell started from scl enable command above
-
将构建复制到一个单独的目录中,在那里我们可以运行它
$ cp -a bin/Debug/netcoreapp3.1/publish ../hello-bin
-
创建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
-
设置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,它就开始工作了。