2014-02-23 15 views
0

我想要在每个非全局区域上运行多个命令而不登录。这可以通过使用非交互模式来实现,但问题是我们如何在每个非全局区域上为每个命令创建一个脚本。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 

如果某个区域处于已安装状态,输出将如何来?

回答

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 
+0

这就是我想要的,但奥菱的事情是,如果该区域处于安装状态,那么怎么可能呢确切的事获得打印 – user2293219

+0

如果区域处于安装状态,即未运行,您希望打印什么? – jlliagre

+0

my-zone2已安装my-zone3已安装 – user2293219