@@ -98,13 +98,16 @@ func (p *ProxySQLProvider) CreateSandbox(config providers.SandboxConfig) (*provi
9898 }
9999
100100 // Write lifecycle scripts
101+ // ProxySQL daemonizes by default — it forks and the parent exits.
102+ // We use ProxySQL's own PID file (written to datadir/proxysql.pid) to track the process.
103+ pidFile := filepath .Join (dataDir , "proxysql.pid" )
101104 scripts := map [string ]string {
102- "start" : fmt .Sprintf ("#!/bin/bash\n cd %s\n %s --initial -c %s -D %s & \n SBPID=$! \n echo $SBPID > %s/proxysql.pid \n sleep 2 \n if kill -0 $SBPID 2>/dev/null; then\n echo ' ProxySQL started (pid '$SBPID')' \n else \n echo 'ProxySQL failed to start'\n exit 1 \n fi \n " ,
103- config .Dir , binaryPath , cfgPath , dataDir , config . Dir ),
104- "stop" : fmt .Sprintf ("#!/bin/bash\n PIDFILE=%s/proxysql.pid \ n if [ -f $PIDFILE ]; then\n PID=$(cat $PIDFILE)\n kill $PID 2>/dev/null\n sleep 1\n kill -0 $PID 2>/dev/null && kill -9 $PID 2>/dev/null\n rm -f $PIDFILE\n echo 'ProxySQL stopped'\n else\n echo 'ProxySQL not running (no pid file)'\n fi\n " ,
105- config . Dir ),
106- "status" : fmt .Sprintf ("#!/bin/bash\n PIDFILE=%s/proxysql.pid \n if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE) 2>/dev/null; then\n echo ' ProxySQL running (pid ' $(cat $PIDFILE)')' \n else\n echo 'ProxySQL not running'\n exit 1\n fi\n " ,
107- config . Dir ),
105+ "start" : fmt .Sprintf ("#!/bin/bash\n cd %s\n %s --initial -c %s -D %s 2>&1 | grep -v '^profiling:' || true \n # ProxySQL daemonizes — wait for PID file \n for i in $(seq 1 10); do \n if [ -f %s ]; then \n PID=$(cat %s) \n if kill -0 $PID 2>/dev/null; then\n sleep 2 \n echo \" ProxySQL started (pid $PID) \" \n exit 0 \n fi \n fi \n sleep 1 \n done \n echo 'ProxySQL failed to start'\n exit 1 \n " ,
106+ config .Dir , binaryPath , cfgPath , dataDir , pidFile , pidFile ),
107+ "stop" : fmt .Sprintf ("#!/bin/bash\n PIDFILE=%s\n CONFIG=%s \ n if [ -f $PIDFILE ]; then\n PID=$(cat $PIDFILE)\n # Kill main process and any children matching our config \n kill $PID 2>/dev/null\n pkill -f \" proxysql.*$CONFIG \" 2>/dev/null \n for i in $(seq 1 5); do \n kill -0 $PID 2>/dev/null || break \n sleep 1\n done \n kill -0 $PID 2>/dev/null && kill -9 $PID 2>/dev/null\n pkill -9 -f \" proxysql.*$CONFIG \" 2>/dev/null \n rm -f $PIDFILE\n echo 'ProxySQL stopped'\n else\n # Try to find and kill by config file pattern \n pkill -f \" proxysql.*$CONFIG \" 2>/dev/null \n echo 'ProxySQL stopped (no pid file)'\n fi\n " ,
108+ pidFile , cfgPath ),
109+ "status" : fmt .Sprintf ("#!/bin/bash\n PIDFILE=%s\n if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE) 2>/dev/null; then\n echo \" ProxySQL running (pid $(cat $PIDFILE)) \" \n else\n echo 'ProxySQL not running'\n exit 1\n fi\n " ,
110+ pidFile ),
108111 "use" : fmt .Sprintf ("#!/bin/bash\n mysql -h %s -P %d -u %s -p%s --prompt 'ProxySQL Admin> ' \" $@\" \n " ,
109112 host , adminPort , adminUser , adminPassword ),
110113 "use_proxy" : fmt .Sprintf ("#!/bin/bash\n mysql -h %s -P %d -u %s -p%s --prompt 'ProxySQL> ' \" $@\" \n " ,
0 commit comments