我试图制作一个简单的20行小脚本来重启我的Go
程序,这是我到目前为止所做的:
#!/bin/bash
chsum1=""
pid=""
while true ; do
chsum2=$(find ./ -type f -exec md5 {} \;)
if [[ $chsum1 != [[$chsum2 ]] ; then
if [[ $pid != "" ]] ; then
kill $pid
fi
go run main.go &
pid=$(%%)
chsum1=$chsum2
echo "RESTARTED"
fi
sleep 2
done
它可以工作但是当它重新启动时,我仍在使用端口。
我不能100%确定我在哪里出错了我对bash没有多少经验
答案 0 :(得分:0)
你有错误(太多[[
):
if [[ $chsum1 != [[$chsum2 ]] ; then
至于kill信号,你发送一个gracefull kill(SIGTERM
),所以应用程序不会马上死掉,它会尝试停止所有任务并关闭,但这可能需要一些时间。
我会做一个小循环,检查给定的pid是否仍然存在,并且只有在pid真的死后才重启:
if [[ $pid != "" ]] ; then
kill $pid
while ps -p $pid >/dev/null; then
sleep 1
done
fi
以上代码将永远循环,因此您可能希望尝试限制循环次数(例如,使用for i in seq 100
)