【发布时间】:2016-12-21 21:45:55
【问题描述】:
我今天创建了一个 Jenkins 作业,它的作用是让 Jenkins 用户登录另一台服务器并运行两个由 && 分隔的命令:
ssh -i /creds/jenkins jenkins@servername.com "sh -c 'sudo su && df'"
日志部分工作正常,然后它运行 sudo su 命令并成为 root 但它从不运行第二个命令(即df)。
我什至手动执行此操作,并从 Jenkins 机器登录到另一台服务器(服务器名称)。然后运行sh -c "sudo su && df" 没有运气。
你能帮忙吗?
提前致谢
【问题讨论】:
-
sudo su启动一个新的shell;该命令在该 shell 退出之前不会退出。最重要的是,df不在那个 shell 中运行。你可能只想要ssh -i /creds/jenkins jenkins@servername.com 'sudo df'。 -
从什么时候开始需要root权限才能运行
df? -
其实第二个命令不是df。我打了一个例子。我想运行这个命令:lxc exec containername bash
-
sudo lxc exec containername bash,然后。不需要&&,也不需要登录shell(由su -或最好是sudo -i创建),除非lxc取决于在点文件中设置的环境变量。 -
...要清楚,当您以交互方式运行
sudo su并获得提示时,当您在该提示下时,sudo和su(或他们使用的进程)exec替换自己)仍在运行,并且它们(或它们的 PID 替换为的后继进程 - 可以是进程sudo或su被告知执行)继续运行,直到您退出该提示。这就是为什么当您编写一个命令等待sudo(以及您告诉sudo启动的su的副本)在它继续执行其他操作之前退出时,它会失败。
标签: bash shell jenkins command-line