Skip to content
Snippets Groups Projects
Commit 115d5500 authored by James Arcus's avatar James Arcus Committed by root
Browse files

Add SIGUSR1 traceback (made by jimbo, committed by TPG)

parent 87633e73
Branches
No related merge requests found
"""
TracebackPrinter.py - Prints the current stack trace to a specified
file when SIGUSR1 is received.
---
Author: James Arcus <jimbo@ucc.asn.au>
Based-On: python-traceback-signal
<https://github.com/angelcam/python-traceback-signal>
Author: Angelcam <dev@angelcam.com>
"""
import os
import sys
import traceback
import signal
def print_traceback(wfd, frame):
msg = "Traceback signal received.\nTraceback (most recent call last):\n"
msg += ''.join(traceback.format_stack(frame))
os.write(wfd, msg)
def register_sigusr(wfd):
def sigusr_handler(_, frame):
# first param is which signal
print_traceback(wfd, frame)
signal.signal(signal.SIGUSR1, sigusr_handler)
def traceback_init(f):
wfd = os.open(f, os.O_WRONLY | os.O_APPEND | os.O_CREAT, 0o600)
register_sigusr(wfd)
......@@ -20,6 +20,7 @@ from SnackConfig import get_snack#, get_snacks
import socket
from posix import geteuid
from OpenDispense import OpenDispense as Dispense
import TracebackPrinter
CREDITS="""
This vending machine software brought to you by:
......@@ -963,6 +964,7 @@ def parse_args():
op.add_option('-v', '--verbose', dest='verbose', action='store_true', default=False, help='spit out lots of debug output')
op.add_option('-q', '--quiet', dest='quiet', action='store_true', default=False, help='only report errors')
op.add_option('--pid-file', dest='pid_file', metavar='FILE', default='', help='store daemon\'s pid in the given file')
op.add_option('--traceback-file', dest='traceback_file', default='', help='destination to print tracebacks when receiving SIGUSR1')
options, args = op.parse_args()
if len(args) != 0:
......@@ -991,7 +993,7 @@ def set_stuff_up():
if options.daemon: become_daemon()
set_up_logging(options)
if options.pid_file != '': create_pid_file(options.pid_file)
if options.traceback_file != '': TracebackPrinter.traceback_init(options.traceback_file)
return options, config_opts
def clean_up_nicely(options, config_opts):
......@@ -1055,7 +1057,7 @@ def do_vend_server(options, config_opts):
continue
# run_forever(rfh, wfh, options, config_opts)
try:
vserver = VendServer()
vserver.run_forever(rfh, wfh, options, config_opts)
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment