atsrt seweb and feeder as systemd user unit

This commit is contained in:
2025-05-19 18:09:02 +02:00
parent bb95798ff3
commit 9a673afb21
6 changed files with 83 additions and 47 deletions

View File

@ -31,8 +31,7 @@ from servicemanager.base import ServiceManager, ServiceDown, UsageError, get_con
from servicemanager.nicosman import NicosManager from servicemanager.nicosman import NicosManager
from servicemanager.seaman import SeaManager from servicemanager.seaman import SeaManager
from servicemanager.frappyman import FrappyManager, Reconnect, Keep from servicemanager.frappyman import FrappyManager, Reconnect, Keep
from servicemanager.sewebman import SewebManager from servicemanager.single import SewebManager, FeederManager
from servicemanager.feederman import FeederManager
#from servicemanager.racks import RackConfig #from servicemanager.racks import RackConfig

11
cfg/feeder@.service Normal file
View File

@ -0,0 +1,11 @@
[Unit]
Description=sehistory feeder process
[Service]
Type=simple
WorkingDirectory=/home/l_samenv/sehistory
ExecStart=/usr/bin/python feeder.py -d %i
Restart=always
[Install]
WantedBy=default.target

View File

@ -19,11 +19,11 @@ sea_command = ./SeaServer %(serv)s.tcl
SEWEB_ROOT = ~/seweb SEWEB_ROOT = ~/seweb
SEWEB_PORT = 8941 SEWEB_PORT = 8941
seweb_command = ~/sevenv/bin/python secop-webserver %(port)s seweb_command = ~/sevenv/bin/python secop-webserver %(port)s -i %(ins)s
FEEDER_ROOT = ~/sehistory FEEDER_ROOT = ~/sehistory
FEEDER_PORT = 0 FEEDER_PORT = 0
feeder_command = ~/sevenv/bin/python feeder.py %(serv)s feeder_command = ~/sevenv/bin/python feeder.py -d %(serv)s
PYTHONPATH = ~:~/frappy PYTHONPATH = ~:~/frappy

11
cfg/seweb@.service Normal file
View File

@ -0,0 +1,11 @@
[Unit]
Description=SE web server
[Service]
Type=simple
WorkingDirectory=/home/l_samenv/seweb
ExecStart=/usr/bin/python secop-webserver -i %i
Restart=always
[Install]
WantedBy=default.target

View File

@ -1,38 +0,0 @@
# *****************************************************************************
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Module authors:
# Markus Zolliker <markus.zolliker@psi.ch>
#
# *****************************************************************************
from servicemanager.base import ServiceManager
class SewebManager(ServiceManager):
group = 'seweb'
services = ('',)
USAGE = """
Usage:
seweb start <instance>
seweb restart <instance>
seweb stop <instance>
seweb list [<instance>]
%s
"""

View File

@ -19,12 +19,49 @@
# #
# ***************************************************************************** # *****************************************************************************
import os
from os.path import expanduser from os.path import expanduser
from configparser import ConfigParser from configparser import ConfigParser
from servicemanager.base import ServiceManager from servicemanager.base import ServiceManager
class FeederManager(ServiceManager): class SingleManager(ServiceManager):
"""service to be started with systemd, only one per computer
running as systemd (user level)
"""
def systemd_service(self, service):
"""return the name of the systemd service"""
raise NotImplementedError
def treat_args(self, argdict, unknown=(), extra=()):
if not argdict.get('ins'):
argdict['ins'] = self.single_ins
return super().treat_args(argdict, unknown, extra)
def systemd_action(self, service, action):
service_ports = self.get_ins_info(self.single_ins)
services = list(service_ports) if service is None else [service]
for service in services:
print(f'systemctl --user {action} {self.group}@{service}')
os.system(f'systemctl --user {action} {self.systemd_service(service)}')
def do_start(self, ins, service=None, cfg='', restart=False, wait=False, logger=None, opts=''):
if wait:
super().do_start(ins, service, False, True, logger, opts)
return
if restart:
action = 'restart'
else:
action = 'start'
self.systemd_action(service, action)
def do_stop(self, ins, service=None, *args):
self.systemd_action(service, 'stop')
class FeederManager(SingleManager):
group = 'feeder' group = 'feeder'
services = ('central', 'local') services = ('central', 'local')
USAGE = """ USAGE = """
@ -45,7 +82,23 @@ class FeederManager(ServiceManager):
self.services = services self.services = services
super().__init__() super().__init__()
def treat_args(self, argdict, unknown=(), extra=()): def systemd_service(self, service):
if not argdict.get('ins'): return f'{self.group}@{service}'
argdict['ins'] = self.single_ins
return super().treat_args(argdict, unknown, extra)
class SewebManager(SingleManager):
group = 'seweb'
services = ('',)
USAGE = """
Usage:
seweb start <instance>
seweb restart <instance>
seweb stop <instance>
seweb list [<instance>]
%s
"""
def systemd_service(self, service):
return f'{self.group}@{self.single_ins}'