mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Merge pull request #468 from YunoHost/clean_services.py
more debug output in services.py
This commit is contained in:
commit
74b38ba929
2 changed files with 35 additions and 14 deletions
|
@ -335,9 +335,9 @@
|
||||||
"service_conf_up_to_date": "The configuration is already up-to-date for service '{service}'",
|
"service_conf_up_to_date": "The configuration is already up-to-date for service '{service}'",
|
||||||
"service_conf_updated": "The configuration has been updated for service '{service}'",
|
"service_conf_updated": "The configuration has been updated for service '{service}'",
|
||||||
"service_conf_would_be_updated": "The configuration would have been updated for service '{service}'",
|
"service_conf_would_be_updated": "The configuration would have been updated for service '{service}'",
|
||||||
"service_disable_failed": "Unable to disable service '{service:s}'",
|
"service_disable_failed": "Unable to disable service '{service:s}'\n\nRecent service logs:{logs:s}",
|
||||||
"service_disabled": "The service '{service:s}' has been disabled",
|
"service_disabled": "The service '{service:s}' has been disabled",
|
||||||
"service_enable_failed": "Unable to enable service '{service:s}'",
|
"service_enable_failed": "Unable to enable service '{service:s}'\n\nRecent service logs:{logs:s}",
|
||||||
"service_enabled": "The service '{service:s}' has been enabled",
|
"service_enabled": "The service '{service:s}' has been enabled",
|
||||||
"service_no_log": "No log to display for service '{service:s}'",
|
"service_no_log": "No log to display for service '{service:s}'",
|
||||||
"service_regenconf_dry_pending_applying": "Checking pending configuration which would have been applied for service '{service}'...",
|
"service_regenconf_dry_pending_applying": "Checking pending configuration which would have been applied for service '{service}'...",
|
||||||
|
@ -345,10 +345,10 @@
|
||||||
"service_regenconf_pending_applying": "Applying pending configuration for service '{service}'...",
|
"service_regenconf_pending_applying": "Applying pending configuration for service '{service}'...",
|
||||||
"service_remove_failed": "Unable to remove service '{service:s}'",
|
"service_remove_failed": "Unable to remove service '{service:s}'",
|
||||||
"service_removed": "The service '{service:s}' has been removed",
|
"service_removed": "The service '{service:s}' has been removed",
|
||||||
"service_start_failed": "Unable to start service '{service:s}'",
|
"service_start_failed": "Unable to start service '{service:s}'\n\nRecent service logs:{logs:s}",
|
||||||
"service_started": "The service '{service:s}' has been started",
|
"service_started": "The service '{service:s}' has been started",
|
||||||
"service_status_failed": "Unable to determine status of service '{service:s}'",
|
"service_status_failed": "Unable to determine status of service '{service:s}'",
|
||||||
"service_stop_failed": "Unable to stop service '{service:s}'",
|
"service_stop_failed": "Unable to stop service '{service:s}'\n\nRecent service logs:{logs:s}",
|
||||||
"service_stopped": "The service '{service:s}' has been stopped",
|
"service_stopped": "The service '{service:s}' has been stopped",
|
||||||
"service_unknown": "Unknown service '{service:s}'",
|
"service_unknown": "Unknown service '{service:s}'",
|
||||||
"ssowat_conf_generated": "The SSOwat configuration has been generated",
|
"ssowat_conf_generated": "The SSOwat configuration has been generated",
|
||||||
|
|
|
@ -75,6 +75,7 @@ def service_add(name, status=None, log=None, runlevel=None):
|
||||||
try:
|
try:
|
||||||
_save_services(services)
|
_save_services(services)
|
||||||
except:
|
except:
|
||||||
|
# we'll get a logger.warning with more details in _save_services
|
||||||
raise MoulinetteError(errno.EIO, m18n.n('service_add_failed', service=name))
|
raise MoulinetteError(errno.EIO, m18n.n('service_add_failed', service=name))
|
||||||
|
|
||||||
logger.success(m18n.n('service_added', service=name))
|
logger.success(m18n.n('service_added', service=name))
|
||||||
|
@ -98,6 +99,7 @@ def service_remove(name):
|
||||||
try:
|
try:
|
||||||
_save_services(services)
|
_save_services(services)
|
||||||
except:
|
except:
|
||||||
|
# we'll get a logger.warning with more details in _save_services
|
||||||
raise MoulinetteError(errno.EIO, m18n.n('service_remove_failed', service=name))
|
raise MoulinetteError(errno.EIO, m18n.n('service_remove_failed', service=name))
|
||||||
|
|
||||||
logger.success(m18n.n('service_removed', service=name))
|
logger.success(m18n.n('service_removed', service=name))
|
||||||
|
@ -113,13 +115,16 @@ def service_start(names):
|
||||||
"""
|
"""
|
||||||
if isinstance(names, str):
|
if isinstance(names, str):
|
||||||
names = [names]
|
names = [names]
|
||||||
|
|
||||||
for name in names:
|
for name in names:
|
||||||
if _run_service_command('start', name):
|
if _run_service_command('start', name):
|
||||||
logger.success(m18n.n('service_started', service=name))
|
logger.success(m18n.n('service_started', service=name))
|
||||||
else:
|
else:
|
||||||
if service_status(name)['status'] != 'running':
|
if service_status(name)['status'] != 'running':
|
||||||
raise MoulinetteError(errno.EPERM,
|
raise MoulinetteError(errno.EPERM,
|
||||||
m18n.n('service_start_failed', service=name))
|
m18n.n('service_start_failed',
|
||||||
|
service=name,
|
||||||
|
logs=_get_journalctl_logs(name)))
|
||||||
logger.info(m18n.n('service_already_started', service=name))
|
logger.info(m18n.n('service_already_started', service=name))
|
||||||
|
|
||||||
|
|
||||||
|
@ -139,7 +144,9 @@ def service_stop(names):
|
||||||
else:
|
else:
|
||||||
if service_status(name)['status'] != 'inactive':
|
if service_status(name)['status'] != 'inactive':
|
||||||
raise MoulinetteError(errno.EPERM,
|
raise MoulinetteError(errno.EPERM,
|
||||||
m18n.n('service_stop_failed', service=name))
|
m18n.n('service_stop_failed',
|
||||||
|
service=name,
|
||||||
|
logs=_get_journalctl_logs(name)))
|
||||||
logger.info(m18n.n('service_already_stopped', service=name))
|
logger.info(m18n.n('service_already_stopped', service=name))
|
||||||
|
|
||||||
|
|
||||||
|
@ -158,7 +165,9 @@ def service_enable(names):
|
||||||
logger.success(m18n.n('service_enabled', service=name))
|
logger.success(m18n.n('service_enabled', service=name))
|
||||||
else:
|
else:
|
||||||
raise MoulinetteError(errno.EPERM,
|
raise MoulinetteError(errno.EPERM,
|
||||||
m18n.n('service_enable_failed', service=name))
|
m18n.n('service_enable_failed',
|
||||||
|
service=name,
|
||||||
|
logs=_get_journalctl_logs(name)))
|
||||||
|
|
||||||
|
|
||||||
def service_disable(names):
|
def service_disable(names):
|
||||||
|
@ -176,7 +185,9 @@ def service_disable(names):
|
||||||
logger.success(m18n.n('service_disabled', service=name))
|
logger.success(m18n.n('service_disabled', service=name))
|
||||||
else:
|
else:
|
||||||
raise MoulinetteError(errno.EPERM,
|
raise MoulinetteError(errno.EPERM,
|
||||||
m18n.n('service_disable_failed', service=name))
|
m18n.n('service_disable_failed',
|
||||||
|
service=name,
|
||||||
|
logs=_get_journalctl_logs(name)))
|
||||||
|
|
||||||
|
|
||||||
def service_status(names=[]):
|
def service_status(names=[]):
|
||||||
|
@ -218,8 +229,8 @@ def service_status(names=[]):
|
||||||
|
|
||||||
# Retrieve service status
|
# Retrieve service status
|
||||||
try:
|
try:
|
||||||
ret = subprocess.check_output(status, stderr=subprocess.STDOUT,
|
subprocess.check_output(status, stderr=subprocess.STDOUT,
|
||||||
shell=True)
|
shell=True)
|
||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
if 'usage:' in e.output.lower():
|
if 'usage:' in e.output.lower():
|
||||||
logger.warning(m18n.n('service_status_failed', service=name))
|
logger.warning(m18n.n('service_status_failed', service=name))
|
||||||
|
@ -603,9 +614,12 @@ def _save_services(services):
|
||||||
services -- A dict of managed services with their parameters
|
services -- A dict of managed services with their parameters
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# TODO: Save to custom services.yml
|
try:
|
||||||
with open('/etc/yunohost/services.yml', 'w') as f:
|
with open('/etc/yunohost/services.yml', 'w') as f:
|
||||||
yaml.safe_dump(services, f, default_flow_style=False)
|
yaml.safe_dump(services, f, default_flow_style=False)
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning('Error while saving services, exception: %s', e, exc_info=1)
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
def _tail(file, n, offset=None):
|
def _tail(file, n, offset=None):
|
||||||
|
@ -813,6 +827,14 @@ def manually_modified_files():
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
def _get_journalctl_logs(service):
|
||||||
|
try:
|
||||||
|
return subprocess.check_output("journalctl -xn -u %s" % service, shell=True)
|
||||||
|
except:
|
||||||
|
import traceback
|
||||||
|
return "error while get services logs from journalctl:\n%s" % traceback.format_exc()
|
||||||
|
|
||||||
|
|
||||||
def manually_modified_files_compared_to_debian_default():
|
def manually_modified_files_compared_to_debian_default():
|
||||||
|
|
||||||
# from https://serverfault.com/a/90401
|
# from https://serverfault.com/a/90401
|
||||||
|
@ -821,4 +843,3 @@ def manually_modified_files_compared_to_debian_default():
|
||||||
| md5sum -c 2>/dev/null \
|
| md5sum -c 2>/dev/null \
|
||||||
| awk -F': ' '$2 !~ /OK/{print $1}'", shell=True)
|
| awk -F': ' '$2 !~ /OK/{print $1}'", shell=True)
|
||||||
return r.strip().split("\n")
|
return r.strip().split("\n")
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue