我目前有一个Makefile规则:
start:
./start.sh
这将启动一个非常简单的服务器,这是构建过程的一部分。我还有另一条停止服务器的规则:
stop:
kill `cat bin/server.PID`
这是start.sh脚本:
#!/bin/bash
cd bin
python server.py &
echo $! > server.PID
NB server.py必须在bin目录中运行
我想在启动规则中实现start.sh的功能,我已经尝试了很多事情,但似乎无法获得PID。
我不明白你在哪里被困。怎么了
start:
cd bin && { python server.py & echo $$! > server.PID; }
?
您还可以使pidfile成为目标和依赖项:
start: server.PID
server.PID:
cd bin && { python server.py & echo $$! > $@; }
stop: server.PID
kill `cat $<` && rm $<
.PHONY: start stop
@ reinierpost的答案对我来说很棒,但是当我尝试(在osx和make上)时,它返回“语法错误,出现在意外标记'&&'附近”。将启动命令放在shell脚本中可以达到目的,并且易于阅读/理解/维护:
Makefile:
start: server.PID
server.PID:
./start_server.sh
stop: server.PID
kill `cat server.PID`
rm server.PID
start_server.sh:
cd /path/to/test
./run_my_test &
PID=$!
echo $PID > server.PID