From 9c5ffd8d132866bd6120696e138e5b7b42dc3f23 Mon Sep 17 00:00:00 2001 From: Matthew Treinish Date: Wed, 29 Mar 2017 16:47:57 -0400 Subject: [PATCH] Handle uwsgi on systemd properly uwsgi is a different service type under systemd and shouldn't be run as a standard oneshot type. The uwsgi docs outline a good pattern for writing systemd unit files: http://uwsgi-docs.readthedocs.io/en/latest/Systemd.html This commit takes those suggestions and creates a separate path for writing uwsgi unit files. Change-Id: I9b541b86781afdded311dba058cedd783e1a0dfa --- functions-common | 32 +++++++++++++++++++++++++++++++- lib/keystone | 7 +++++-- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/functions-common b/functions-common index ec68644757..5b096c60f7 100644 --- a/functions-common +++ b/functions-common @@ -1467,6 +1467,32 @@ function write_user_unit_file { $SYSTEMCTL daemon-reload } +function write_uwsgi_user_unit_file { + local service=$1 + local command="$2" + local group=$3 + local user=$4 + local unitfile="$SYSTEMD_DIR/$service" + mkdir -p $SYSTEMD_DIR + + iniset -sudo $unitfile "Unit" "Description" "Devstack $service" + iniset -sudo $unitfile "Service" "User" "$user" + iniset -sudo $unitfile "Service" "ExecStart" "$command" + iniset -sudo $unitfile "Service" "Type" "notify" + iniset -sudo $unitfile "Service" "KillSignal" "SIGQUIT" + iniset -sudo $unitfile "Service" "Restart" "Always" + iniset -sudo $unitfile "Service" "NotifyAccess" "all" + iniset -sudo $unitfile "Service" "RestartForceExitStatus" "100" + + if [[ -n "$group" ]]; then + iniset -sudo $unitfile "Service" "Group" "$group" + fi + iniset -sudo $unitfile "Install" "WantedBy" "multi-user.target" + + # changes to existing units sometimes need a refresh + $SYSTEMCTL daemon-reload +} + function _run_under_systemd { local service=$1 local command="$2" @@ -1474,7 +1500,11 @@ function _run_under_systemd { local systemd_service="devstack@$service.service" local group=$3 local user=${4:-$STACK_USER} - write_user_unit_file $systemd_service "$cmd" "$group" "$user" + if [[ "$command" =~ "uwsgi" ]] ; then + write_uwsgi_user_unit_file $systemd_service "$cmd" "$group" "$user" + else + write_user_unit_file $systemd_service "$cmd" "$group" "$user" + fi $SYSTEMCTL enable $systemd_service $SYSTEMCTL start $systemd_service diff --git a/lib/keystone b/lib/keystone index d4b3a66e24..3db3c8d4aa 100644 --- a/lib/keystone +++ b/lib/keystone @@ -604,8 +604,8 @@ function start_keystone { # TODO(sdague): we should really get down to a single keystone here enable_service key-p enable_service key-a - run_process key-p "$KEYSTONE_BIN_DIR/uwsgi $KEYSTONE_PUBLIC_UWSGI_FILE" "" - run_process key-a "$KEYSTONE_BIN_DIR/uwsgi $KEYSTONE_ADMIN_UWSGI_FILE" "" + run_process key-p "$KEYSTONE_BIN_DIR/uwsgi --ini $KEYSTONE_PUBLIC_UWSGI_FILE" "" + run_process key-a "$KEYSTONE_BIN_DIR/uwsgi --ini $KEYSTONE_ADMIN_UWSGI_FILE" "" fi echo "Waiting for keystone to start..." @@ -638,6 +638,9 @@ function stop_keystone { if [ "$KEYSTONE_DEPLOY" == "mod_wsgi" ]; then disable_apache_site keystone restart_apache_server + else + stop_process key-p + stop_process key-a fi # Kill the Keystone screen window stop_process key