# DaemonBase Library Simple C++ header only template for creating Linux daemons ### What are daemon services/processes ? A dæmon is a program that runs silently in the background.
Commonly, dæmon processes are created to offer a specific service. **Dæmon** processes usually: - Live for a long time; - Started at boot time; - Terminate only during shutdown; - Have no controlling terminal. [//]: # (### Dæmon Characteristics) [//]: # (The previously listed characteristics have certain implications:) [//]: # () [//]: # (- do one thing, and one thing only) [//]: # (- resource leaks eventually surface) [//]: # (- consider current working directory) [//]: # (- no (or only limited) user-interaction possible) [//]: # (- how to create (debugging) output) ### Usage DaemonBase has a simple, straightforward api with callbacks to handle your daemon events. ```cpp #include "daemonbase.h" #include using namespace osdev::components::daemon; using namespace std::chrono_literals; class MyExampleDaemon : public DaemonBase { public: void on_start(const daemonconfig &config) override { /// Called once after daemon starts automatically with system startup /// or when you manually call `$ system,ctl start MyExampleDaemon` /// Initialize your code here... daemonlog::info("MyExampleDaemon::on_start(): MyExampleDaemon version: " + config.get("version") + " started successfully!"); } void on_update() override { /// Called every DURATION set in set_update_duration()... /// Update your code here daemonlog::info("MyExampleDaemon::on_update()"); } void on_stop() override { /// Called once before daemon is about to exit with system shutdown or when you manually call `$ systemctl stop MyExampleDaemon` /// Cleanup your code here... daemonlog::info("MyExampleDaemon::on_stop()"); } void on_reload(const daemonconfig &cfg) override { /// Called once after your daemon's config fil is updated then reloaded with `$ systemctl reload MyExampleDaemon` /// Handle your config updates here... daemonlog::info("MyExampleDaemon::on_reload(): new daemon version from updated config: " + cfg.get("version")); } }; int main(int argc, char *argv[]) { MyExampleDaemon oDaemon; // Create the daemon instance. oDaemon.set_name("MyAweSomeExampleDaemon"); // Set daemon name to identify logs in syslog oDaemon.set_update_duration(3s); // Set duration to sleep before triggering the on_update callback 3 seconds. oDaemon.set_cwd("/root"); // set daemon's current working directory to roots home-folder oDaemon.run(argc, argv); // run the daemon return(EXIT_SUCCESS); // Close the main process now the child process is running. } ```