我想
在推送到服务器时自动拉取、停止和重新启动我的 Play Framework 2.1 实例。
我制作了一个 bash 脚本,我从命令行运行它来完成所有事情,但我希望它在推送后自动运行。我想通过post-receive
钩子执行它,但脚本运行时间太长,并且退出太快。
(花费太长时间的是编译和阶段命令)
这是我的脚本:
#!/bin/bash
#
# /etc/rc.d/init.d/myscript
#
# Starts the myscript Play Framework daemon
#
### BEGIN INIT INFO
# Provides: myscript
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start myscript server at boot time
### END INIT INFO
### BEGIN vars
PORT=9500
BASE_DIR=/path/to/project/
ENV=dev
PLAY_VERSION=2.1rc1
### END vars
#export _JAVA_OPTIONS="-Xms64m -Xmx1024m -Xss2m"
# Exit immediately if a command exits with a nonzero exit status.
set -e
update() {
cd $BASE_DIR$ENV
# Updating the project
git pull origin master
# Creating new project (MUST BE ON THE GOOD DIR)
/opt/play/$PLAY_VERSION/play clean compile stage
}
start() {
/sbin/start-stop-daemon --start --quiet --oknodo --user cyril --chuid cyril --background --startas $BASE_DIR$ENV"/target/start" -- "-Dhttp.port="$PORT" -Dconfig.file="$BASE_DIR$ENV".conf"
}
stop() {
/sbin/start-stop-daemon --stop --quiet --oknodo --user cyril --chuid cyril --pidfile $BASE_DIR$ENV"RUNNING_PID"
rm -f $BASE_DIR$ENV"RUNNING_PID"
}
case "$1" in
start)
echo "Updating and starting the server"
update
start
;;
force-start)
echo "Starting server"
start
;;
stop)
echo "Stopping server"
stop
;;
restart)
echo "Updating and re-starting the server"
stop
update
start
;;
force-restart)
echo "Re-starting the server"
stop
start
;;
*)
echo $"Usage: $0 {start|force-start|stop|restart|force-restart}"
esac
exit 0
我怎样才能从我的接收后钩子调用这个脚本,而无需等待整个停止、编译、暂存和启动命令完成?
您可以考虑将脚本放在接收后钩子之外,将其放在 PATH 中,然后从接收后钩子调用它,最后带有一个&
(以便它与接收后脚本分离运行)。