如果进程不存在,如何避免执行命令

如果进程不存在,如何避免执行命令

在 korn shell 脚本中,我正在运行 expdp。我已将脚本设置为可重用的位置,因此如果以后的过程失败,我可以再次运行它,而无需运行已完成的步骤。我正在后台运行两个进程,并等待两个进程完成,然后再继续执行脚本。例如,我使用下面的逻辑来等待。 expdp 进程完成后,我使用日志函数来写入已完成的消息。

while   ps | grep "expdp" | grep -v grep
do
    echo expdp is still in the ps output. Must still be running.
    sleep 5
done

WriteLog "Completed exporting client schemas"

如果该进程不存在(即修复expdp之后发生的任何错误后重用脚本),如何将其设置为仅当expdp进程存在时才发生写日志的位置。如果从 ps 中找不到进程,则不应再次写入日志。

答案1

我认为您搜索的方式错误。我会写这样一个脚本:

if [ "z$STEP5" != "zOK" ] ; then
    expdp -your_options > $logfile &
    while ps ax | grep [e]xpdp ; do
        echo "expdp still in progress..."
        sleep 5
    done
    wait # in order to be sure there is no more background processes...
    tail -n1 $logfile | grep "successfully without warnings" >/dev/null 2>&1
    if [ $? -ne 0 ] ; then 
        echo "Some errors occured while export"
    else
        echo "Export done sucessfully"
    fi
fi

相关内容