diff --git a/xCAT-genesis-scripts/bin/doxcat b/xCAT-genesis-scripts/bin/doxcat
index 0f39e1e89..a5a9ecb2b 100755
--- a/xCAT-genesis-scripts/bin/doxcat
+++ b/xCAT-genesis-scripts/bin/doxcat
@@ -422,7 +422,11 @@ while :; do
logger -s -t $log_label -p local4.info "Poweroff..."
poweroff -f
else
- logger -s -t $log_label -p local4.err "Unrecognized directive (dest=$dest)"
+ if [ "$dest" = error ]; then
+ logger -s -t $log_label -p local4.info "$destparameter"
+ else
+ logger -s -t $log_label -p local4.err "Unrecognized directive (dest=$dest)"
+ fi
destiny=''
dest=''
delay=$((30+$RANDOM%270))
diff --git a/xCAT-genesis-scripts/bin/nextdestiny b/xCAT-genesis-scripts/bin/nextdestiny
index 29b6c255f..086951c98 100755
--- a/xCAT-genesis-scripts/bin/nextdestiny
+++ b/xCAT-genesis-scripts/bin/nextdestiny
@@ -7,23 +7,30 @@ echo "
300
" > /tmp/destreq.xml
if [ -f /tmp/destiny.xml ]; then rm /tmp/destiny.xml; fi
-while [ ! -f /tmp/destiny.xml ] || grep error /tmp/destiny.xml; do
- if [ -f /tmp/destiny.xml ]; then
- timer=60
- while [ $timer -gt 0 ]; do
- echo -en "Retrying in $timer seconds \r" >&2
- sleep 1
- timer=$(($timer-1));
- done
- fi
+timer=0
+while [ ! -f /tmp/destiny.xml ]; do
+ while [ $timer -gt 0 ]; do
+ echo -en "No destiny command received, retrying in $timer seconds \r" >&2
+ sleep 1
+ timer=$(($timer-1));
+ done
echo " " >&2;
if [ -f /etc/xcat/cert.pem -a -f /etc/xcat/certkey.pem ]; then #use client cert if available
cat /tmp/destreq.xml | openssl s_client -key /etc/xcat/certkey.pem -cert /etc/xcat/cert.pem -connect $XCATDEST -quiet 2> /dev/null > /tmp/destiny.xml
else
cat /tmp/destreq.xml | openssl s_client -connect $XCATDEST -quiet 2> /dev/null > /tmp/destiny.xml
fi
+ timer=60
done
rm /tmp/destreq.xml
DESTINY=`grep '' /tmp/destiny.xml | awk -F'>' '{print $2}'|awk -F'<' '{print $1}'`
+if [ -z "$DESTINY" ]; then
+ ERROR=`grep '' /tmp/destiny.xml | awk -F'>' '{print $2}'|awk -F'<' '{print $1}'`
+ if [ ! -z "$ERROR" ]; then
+ DESTINY="error=$ERROR"
+ else
+ DESTINY="error=No destiny command received"
+ fi
+fi
rm /tmp/destiny.xml
echo $DESTINY
diff --git a/xCAT-server/lib/xcat/plugins/destiny.pm b/xCAT-server/lib/xcat/plugins/destiny.pm
index 54a7804c7..76f9d208c 100755
--- a/xCAT-server/lib/xcat/plugins/destiny.pm
+++ b/xCAT-server/lib/xcat/plugins/destiny.pm
@@ -389,10 +389,7 @@ sub setdestiny {
ignorekernelchk => $ignorekernelchk,
bootparams => \$bphash}, \&relay_response);
if ($errored) {
- my @myself = xCAT::NetworkUtils->determinehostname();
- my $myname = $myself[ (scalar @myself) - 1 ];
- # The callback function point to xcatd::build_response, it use dclone to clone data, but it can only accept a reference. The error msg here is a simple string, and will cause dclone failed. Seems to be string array can be used by dclone.
- $callback->({ errorcode => [1], error => ["Some nodes failed to set up $state resources on server $myname, aborting"] });
+ # The error messeage for mkinstall/mknetboot/mkstatelite had been output within relay_response function above, don't need to output more
return;
}