Red-DiscordBot/docs/autostart_systemd.rst
zephyrkul da3f86d6ba
Make systemd guide clearer on obtaining username and python path (#3537)
* [docs] make username clearer

* make systemd docs even more clear

* fix first code block
2020-02-11 19:11:36 +01:00

83 lines
2.4 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.. _systemd-service-guide:
==============================================
Setting up auto-restart using systemd on Linux
==============================================
-------------------------
Creating the service file
-------------------------
In order to create the service file, you will first need to know two things, your Linux :code:`username` and your Python :code:`path`
First, your Linux :code:`username` can be fetched with the following command:
.. code-block:: bash
whoami
Next, your python :code:`path` can be fetched with the following commands:
.. code-block:: bash
# If redbot is installed in a virtualenv
source redenv/bin/activate
which python
# If you are using pyenv
pyenv shell <name>
pyenv which python
Then create the new service file:
:code:`sudo -e /etc/systemd/system/red@.service`
Paste the following in the file, and replace all instances of :code:`username` with the Linux username you retrieved above, and :code:`path` with the python path you retrieved above.
.. code-block:: none
[Unit]
Description=%I redbot
After=multi-user.target
[Service]
ExecStart=path -O -m redbot %I --no-prompt
User=username
Group=username
Type=idle
Restart=always
RestartSec=15
RestartPreventExitStatus=0
TimeoutStopSec=10
[Install]
WantedBy=multi-user.target
Save and exit :code:`ctrl + O; enter; ctrl + x`
---------------------------------
Starting and enabling the service
---------------------------------
.. note:: This same file can be used to start as many instances of the bot as you wish, without creating more service files, just start and enable more services and add any bot instance name after the **@**
To start the bot, run the service and add the instance name after the **@**:
:code:`sudo systemctl start red@instancename`
To set the bot to start on boot, you must enable the service, again adding the instance name after the **@**:
:code:`sudo systemctl enable red@instancename`
If you need to shutdown the bot, you can use the ``[p]shutdown`` command or
type the following command in the terminal, still by adding the instance name after the **@**:
:code:`sudo systemctl stop red@instancename`
.. warning:: If the service doesn't stop in the next 10 seconds, the process is killed.
Check your logs to know the cause of the error that prevents the shutdown.
To view Reds log, you can acccess through journalctl:
:code:`sudo journalctl -eu red@instancename`