From 1533eea35143d439442ec84473d0b3fbe78041b5 Mon Sep 17 00:00:00 2001 From: yan Date: Fri, 8 May 2015 12:34:48 -0700 Subject: [PATCH] Start nginx if it's not already running --- .../client/plugins/nginx/configurator.py | 17 ++++++++++++----- .../plugins/nginx/tests/configurator_test.py | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/letsencrypt/client/plugins/nginx/configurator.py b/letsencrypt/client/plugins/nginx/configurator.py index ac6671178..3c00e5e50 100644 --- a/letsencrypt/client/plugins/nginx/configurator.py +++ b/letsencrypt/client/plugins/nginx/configurator.py @@ -545,11 +545,18 @@ def nginx_restart(nginx_ctl): stdout, stderr = proc.communicate() if proc.returncode != 0: - # Enter recovery routine... - logging.error("Nginx Restart Failed!") - logging.error(stdout) - logging.error(stderr) - return False + # Maybe Nginx isn't running + nginx_proc = subprocess.Popen([nginx_ctl], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + stdout, stderr = nginx_proc.communicate() + + if nginx_proc.returncode != 0: + # Enter recovery routine... + logging.error("Nginx Restart Failed!") + logging.error(stdout) + logging.error(stderr) + return False except (OSError, ValueError): logging.fatal( diff --git a/letsencrypt/client/plugins/nginx/tests/configurator_test.py b/letsencrypt/client/plugins/nginx/tests/configurator_test.py index cb5fef6bf..9399d42a6 100644 --- a/letsencrypt/client/plugins/nginx/tests/configurator_test.py +++ b/letsencrypt/client/plugins/nginx/tests/configurator_test.py @@ -259,6 +259,20 @@ class NginxConfiguratorTest(util.NginxTest): mocked.returncode = 0 self.assertTrue(self.config.restart()) + @mock.patch("letsencrypt.client.plugins.nginx.configurator." + "subprocess.Popen") + def test_nginx_restart_fail(self, mock_popen): + mocked = mock_popen() + mocked.communicate.return_value = ('', '') + mocked.returncode = 1 + self.assertFalse(self.config.restart()) + + @mock.patch("letsencrypt.client.plugins.nginx.configurator." + "subprocess.Popen") + def test_no_nginx_start(self, mock_popen): + mock_popen.side_effect = OSError("Can't find program") + self.assertRaises(SystemExit, self.config.restart) + @mock.patch("letsencrypt.client.plugins.nginx.configurator." "subprocess.Popen") def test_config_test(self, mock_popen):