Solaris非全局区域中的非交互式命令

时间:2014-02-23 11:08:33

标签: solaris

我想在没有登录的情况下在每个非全局区域上运行多个命令。这可以通过使用非交互模式来实现,但问题是如何在每个非全局区域为每个命令创建脚本。

以下是一个例子。这可以手动工作,但我无法创建脚本。

zlogin my-zone1 ps -ef | grep -i oracle  

zlogin my-zone2 ps -ef | grep -i oracle  

zlogin my-zone3 ps -ef | grep -i oracle  

tcsh>zoneadm list -civ  
  ID NAME             STATUS     PATH                           BRAND    IP  
   0 global           running    /                              native   shared  
   1 myZone1          running    /export/zones/myZone1          native   shared  
   2 myZone2          running    /export/zones/myZone2          native   shared  
   3 myZone3          installed  /export/zones/myZone2          native   shared  

如果处于已安装状态的区域,输出将如何发生?

1 个答案:

答案 0 :(得分:0)

这是一种方式:

for zone in $(zoneadm list -civ | nawk '$2 != "global" && $3 == "running" {print $2}'); do
    echo ==== $zone ====
    zlogin $zone ps -ef | grep -i oracle
done

请注意,如果区域未处于运行状态,则无需尝试在其中运行ps

根据您所期待的内容,基于pgrepps的更好解决方案可能更简单。

编辑:

如果您希望显示非运行区域:

zoneadm list -civ | nawk '$2 !~ "(global|NAME)" {print $2 " " $3}') | while read name status
do
    echo ==== $name ====
    case "$status" in
    (running) zlogin $zone ps -ef | grep -i oracle ;;
    (*) echo $status ;;
    esac
done