userver: Handling OS signals
Loading...
Searching...
No Matches
Handling OS signals

Default behavior

  • SIGINT - return trace
  • SIGTERM, SIGQUIT - shutdown service
  • SIGUSR1 - reopen file descriptors for log (logrotate)

User behavior

The component os_signals::ProcessorComponent stores os_signals::Processor and listens to SIGUSR1 and SIGUSR2 signals. You can use AddListener function to subscribe to these signals.

For example, we use signal SIGUSR1 in components::Logging for reopening files after executing logrotate.

Example

  1. Add in private field class
    os_signals::Subscriber signal_subscribe_
  2. In in the component's constructor, register a signal listener. For example, components::Logging uses the following code:
    auto& signals_processor = context.FindComponent<os_signals::ProcessorComponent>().Get();
    context.RegisterScope(MakeScope([this, &signals_processor] {
    auto holder = signals_processor.AddListener(this, kName, os_signals::kSigUsr1, &Logging::OnLogRotate);
    // Force logrotate just after signal subscription to be sure we haven't lost signals during the loading.
    // If there were no signals, it's OK to re-open log files one more time.
    OnLogRotate();
    return holder;
    }));