Message ID | 20240327064332.3381069-1-rustyhowell@gmail.com |
---|---|
State | New |
Headers | show |
Series | bitbake: bitbake-prserv: add nodaemon option | expand |
Hello, It doesn't apply on master anymore, can you rebase? Thanks! On 27/03/2024 00:43:32-0600, Rusty Howell wrote: > Add a --nodaemon option to the prserver so it stays in the foreground > and does not fork and exit. > > There are several reasons why one would prefer to run the prserver in the > foreground and not as a daemon. Systemd documentation indicates that non-forking > processes are preferred over forking/daemonized ones. Other use cases include > running the prserver in a docker container and put in a k8s cluster. > > Signed-off-by: Rusty Howell <rustyhowell@gmail.com> > --- > bin/bitbake-prserv | 4 ++++ > lib/prserv/serv.py | 16 ++++++++++++++++ > 2 files changed, 20 insertions(+) > > diff --git a/bin/bitbake-prserv b/bin/bitbake-prserv > index 5be42f3c..0d755fcb 100755 > --- a/bin/bitbake-prserv > +++ b/bin/bitbake-prserv > @@ -32,6 +32,8 @@ def main(): > dest="logfile", type="string", default="prserv.log") > parser.add_option("--loglevel", help="logging level, i.e. CRITICAL, ERROR, WARNING, INFO, DEBUG", > action = "store", type="string", dest="loglevel", default = "INFO") > + parser.add_option("--nodaemon", help="Run prserver in foreground", > + action="store_true", dest="nodaemon") > parser.add_option("--start", help="start daemon", > action="store_true", dest="start") > parser.add_option("--stop", help="stop daemon", > @@ -50,6 +52,8 @@ def main(): > ret=prserv.serv.start_daemon(options.dbfile, options.host, options.port,os.path.abspath(options.logfile), options.read_only) > elif options.stop: > ret=prserv.serv.stop_daemon(options.host, options.port) > + elif options.nodaemon: > + ret=prserv.serv.start_nodaemon(options.dbfile, options.host, options.port, options.read_only) > else: > ret=parser.print_help() > return ret > diff --git a/lib/prserv/serv.py b/lib/prserv/serv.py > index 5fc8863f..111e6e9f 100644 > --- a/lib/prserv/serv.py > +++ b/lib/prserv/serv.py > @@ -207,6 +207,22 @@ def run_as_daemon(func, pidfile, logfile): > os.remove(pidfile) > os._exit(0) > > + > +def start_nodaemon(dbfile, host, port, read_only=False): > + ip = socket.gethostbyname(host) > + dbfile = os.path.abspath(dbfile) > + # Ensure logging makes it to the logfile > + streamhandler = logging.StreamHandler() > + streamhandler.setLevel(logging.DEBUG) > + formatter = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") > + streamhandler.setFormatter(formatter) > + logger.addHandler(streamhandler) > + > + server = PRServer(dbfile, read_only=read_only) > + server.start_tcp_server(ip, port) > + server.serve_forever() > + > + > def start_daemon(dbfile, host, port, logfile, read_only=False): > ip = socket.gethostbyname(host) > pidfile = PIDPREFIX % (ip, port) > -- > 2.25.1 > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#16016): https://lists.openembedded.org/g/bitbake-devel/message/16016 > Mute This Topic: https://lists.openembedded.org/mt/105172873/3617179 > Group Owner: bitbake-devel+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/bitbake-devel/unsub [alexandre.belloni@bootlin.com] > -=-=-=-=-=-=-=-=-=-=-=- >
diff --git a/bin/bitbake-prserv b/bin/bitbake-prserv index 5be42f3c..0d755fcb 100755 --- a/bin/bitbake-prserv +++ b/bin/bitbake-prserv @@ -32,6 +32,8 @@ def main(): dest="logfile", type="string", default="prserv.log") parser.add_option("--loglevel", help="logging level, i.e. CRITICAL, ERROR, WARNING, INFO, DEBUG", action = "store", type="string", dest="loglevel", default = "INFO") + parser.add_option("--nodaemon", help="Run prserver in foreground", + action="store_true", dest="nodaemon") parser.add_option("--start", help="start daemon", action="store_true", dest="start") parser.add_option("--stop", help="stop daemon", @@ -50,6 +52,8 @@ def main(): ret=prserv.serv.start_daemon(options.dbfile, options.host, options.port,os.path.abspath(options.logfile), options.read_only) elif options.stop: ret=prserv.serv.stop_daemon(options.host, options.port) + elif options.nodaemon: + ret=prserv.serv.start_nodaemon(options.dbfile, options.host, options.port, options.read_only) else: ret=parser.print_help() return ret diff --git a/lib/prserv/serv.py b/lib/prserv/serv.py index 5fc8863f..111e6e9f 100644 --- a/lib/prserv/serv.py +++ b/lib/prserv/serv.py @@ -207,6 +207,22 @@ def run_as_daemon(func, pidfile, logfile): os.remove(pidfile) os._exit(0) + +def start_nodaemon(dbfile, host, port, read_only=False): + ip = socket.gethostbyname(host) + dbfile = os.path.abspath(dbfile) + # Ensure logging makes it to the logfile + streamhandler = logging.StreamHandler() + streamhandler.setLevel(logging.DEBUG) + formatter = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") + streamhandler.setFormatter(formatter) + logger.addHandler(streamhandler) + + server = PRServer(dbfile, read_only=read_only) + server.start_tcp_server(ip, port) + server.serve_forever() + + def start_daemon(dbfile, host, port, logfile, read_only=False): ip = socket.gethostbyname(host) pidfile = PIDPREFIX % (ip, port)
Add a --nodaemon option to the prserver so it stays in the foreground and does not fork and exit. There are several reasons why one would prefer to run the prserver in the foreground and not as a daemon. Systemd documentation indicates that non-forking processes are preferred over forking/daemonized ones. Other use cases include running the prserver in a docker container and put in a k8s cluster. Signed-off-by: Rusty Howell <rustyhowell@gmail.com> --- bin/bitbake-prserv | 4 ++++ lib/prserv/serv.py | 16 ++++++++++++++++ 2 files changed, 20 insertions(+)