@@ -25,8 +25,8 @@ use xCAT_monitoring::monitorctrl;
2525use xCAT::TableUtils;
2626
2727my $LOCK_DIR = " /var/lock/xcat/" ;
28- my $LOCK_PATH = " /var/lock/xcat/agent.lock" ;
29- my $AGENT_SOCK_PATH = " /var/run/xcat/agent.sock" ;
28+ my $LOCK_PATH = " /var/lock/xcat/agent- $$ .lock" ;
29+ my $AGENT_SOCK_PATH = " /var/run/xcat/agent- $$ .sock" ;
3030my $PYTHON_LOG_PATH = " /var/log/xcat/agent.log" ;
3131my $PYTHON_AGENT_FILE = " /opt/xcat/lib/python/agent/agent.py" ;
3232my $MSG_TYPE = " message" ;
@@ -76,32 +76,43 @@ sub exists_python_agent {
7676 }
7777 return 0;
7878}
79+ sub python_agent_reaper {
80+ unlink ($LOCK_PATH );
81+ unlink ($AGENT_SOCK_PATH );
82+ }
7983sub start_python_agent {
8084
8185 if (!defined (acquire_lock())) {
8286 xCAT::MsgUtils-> message(" S" , " start_python_agent() Error: Failed to acquire lock" );
8387 return undef ;
8488 }
89+
8590 my $fd ;
86- open ($fd , ' >' , $AGENT_SOCK_PATH ) && close ($fd );
8791 my $pid = fork ;
8892 if (!defined $pid ) {
8993 xCAT::MsgUtils-> message(" S" , " start_python_agent() Error: Unable to fork process" );
9094 return undef ;
95+ } elsif ($pid ){
96+
97+ open ($fd , ' >' , $AGENT_SOCK_PATH ) && close ($fd );
98+ $SIG {INT } = $SIG {TERM } = \&python_agent_reaper;
99+ return $pid ;
91100 }
101+
92102 $SIG {CHLD } = ' DEFAULT' ;
93103 if (!$pid ) {
94104 # child
95105 open ($fd , " >>" , $PYTHON_LOG_PATH ) && close ($fd );
96106 open (STDOUT , ' >>' , $PYTHON_LOG_PATH ) or die (" open: $! " );
97107 open (STDERR , ' >>&' , \*STDOUT ) or die (" open: $! " );
98- my $ret = exec ($PYTHON_AGENT_FILE );
108+ my @args = ( " $PYTHON_AGENT_FILE --sock $AGENT_SOCK_PATH --lockfile $LOCK_PATH " );
109+ my $ret = exec @args ;
99110 if (!defined ($ret )) {
100111 xCAT::MsgUtils-> message(" S" , " start_python_agent() Error: Failed to start the xCAT Python agent." );
101112 exit (1);
102113 }
103114 }
104- return $pid ;
115+
105116}
106117
107118sub handle_message {
@@ -201,6 +212,7 @@ sub wait_agent {
201212 xCAT::MsgUtils-> message(" E" , { data => [" Agent exited unexpectedly. See $PYTHON_LOG_PATH for details." ] }, $callback );
202213 xCAT::MsgUtils-> message(" I" , { data => [" To revert to Perl framework: chdef -t site clustersite openbmcperl=ALL" ] }, $callback );
203214 }
215+ python_agent_reaper();
204216}
205217
206218# --------------------------------------------------------------------------------
0 commit comments