69 lines
2.5 KiB
Markdown
69 lines
2.5 KiB
Markdown
---
|
|
name: common-daemon-cli-skill
|
|
description: Use this skill whenever you need to implement a system daemon mode in your CLI application.
|
|
---
|
|
|
|
# The "daemon" Subcommand
|
|
|
|
Every CLI daemon must have a `daemon` subcommand with the following nested subcommands:
|
|
* logs - view logs of the active daemon
|
|
* enable - enable the daemon, copy configuration files and the executable itself to system directories
|
|
* disable - disable the daemon; if executable files or config were copied to a system directory, do not touch them
|
|
* status - show the daemon's status. Is it enabled? If it crashed, what error? The last 50 lines of logs if it crashed.
|
|
* env - allows modifying the environment variables with which the daemon runs.
|
|
* restart - restarts the daemon
|
|
|
|
For example:
|
|
```shell
|
|
myrootcommand daemon [ enable / disable / logs / status / env ]
|
|
```
|
|
|
|
# Enabling the Daemon
|
|
|
|
Enabling the daemon must support the following operating systems:
|
|
* Linux-based
|
|
* \+ Systemd
|
|
* \+ OpenRC
|
|
* \+ Init.D
|
|
* FreeBSD
|
|
* Windows
|
|
* MacOS
|
|
|
|
(The method by which the application is added to autostart is displayed in `status`)
|
|
|
|
Enabling includes:
|
|
* Copying the configuration file and the application executable to a location where the user won't accidentally delete them. For example, to `/var/lib/*` on Linux. If the `--no-copy` flag is provided, copying is skipped and files remain in their original locations.
|
|
* Adding the application to autostart with the specified config (if there is a config at all)
|
|
* Storing information somewhere publicly accessible that the daemon is enabled.
|
|
|
|
# Disabling
|
|
|
|
When disabling, check whether the daemon exists or not.
|
|
|
|
If the daemon does not exist, simply inform the user.
|
|
|
|
If the daemon is in autostart, remove it from there.
|
|
|
|
# Removing Copies
|
|
|
|
Removes any copies made during enabling, if they were created.
|
|
|
|
Activated by the `--remove` flag.
|
|
|
|
In this case, a random number between 1000 and 2000 is generated, which must be entered into an interactive input field to confirm.
|
|
|
|
The CLI explicitly and clearly notifies the user about this.
|
|
|
|
# Environment Configuration (env)
|
|
|
|
Allows editing / adding / deleting the daemon's environment variables.
|
|
|
|
Subcommands:
|
|
* add - adds a new value; overwrites the old one if it exists
|
|
* remove - removes an environment variable
|
|
* append - appends to an environment variable using the path separator — for example, on Linux: `$PATH:new_value` and so on.
|
|
|
|
```shell
|
|
myrootcommand daemon env append PATH /path/to/my/external/files
|
|
myrootcommand daemon restart
|
|
``` |