【问题标题】:Is there a way to run a shell script on a linux file server from a c# console application有没有办法从 c# 控制台应用程序在 linux 文件服务器上运行 shell 脚本
【发布时间】:2019-12-10 19:19:12
【问题描述】:

我在 linux 文件服务器上有一个充满 DICOM 的目录。我将目录映射为网络驱动器,并创建了一个用于修改 DICOM 标签的 c# 控制台应用程序,修改 DICOM 标签是我在导入数据库之前必须做的事情。

当我在服务器中时,我可以运行以下命令将这个目录中的所有内容导入到我的数据库中:

for x in `ls -d1 *`;
do
    dcmbase_import -U p_mfdid1 -n -l info -i "$x:spiromics:file:H:SPIROMICS";
done

我想知道是否有一种方法可以在 c# 应用程序中运行上述代码。例如,有没有办法访问 linux 文件服务器并执行 shell 脚本?

目前我必须运行我的 c# 应用程序来改变头,然后手动访问服务器并运行 shell 脚本。我希望将所有这些都包含在一个应用程序中,这样我就可以在一天结束时运行它,并让它在夜间进行处理和导入。

【问题讨论】:

  • 在 Linux 服务器上运行脚本的标准方法是通过 ssh。使用 C# ssh 库,或调用外部 ssh 二进制文件
  • 研究使用 Renci.SshNet 库来运行 ssh 命令。
  • 我添加了一些换行符以提高可读性。如果您不同意,请恢复编辑。

标签: c# linux shell dicom


【解决方案1】:

您不能通过网络共享运行 shell 脚本,因为它会在您的本地机器上运行,而您需要在 Linux 机器上运行它。

远程执行代码的常用方法是使用 SSH 运行或使用 RPC 调用。如果可能,我会避免使用 RPC,因为即使它更强大,它也需要更复杂的设置。

从 Karl-Johan Sjögren 的 answerC# send a simple SSH command 中,我能够在 .NET 中找到一个用于 SSH 调用的 git 项目以及一个可以帮助您入门的小存根。您可以将 hostnameOrIp 更改为您的 Linux 服务器,并将要运行的命令更改为您的脚本。

SSH.NET

using (var client = new SshClient("hostnameOrIp", "username", "password"))
{
    client.Connect();
    client.RunCommand("etc/init.d/networking restart");
    client.Disconnect();
}

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 2013-01-18
    相关资源
    最近更新 更多