Define a service file
Defining the following ensures that even after system restart your service is restarted
# /lib/systemd/system/torrent_top_10.service
[Unit]
Description=Run top 10 torrent service
# Wait until the network is available
After=network.target
[Service]
# Run the binary that was generated by mix release
ExecStart=/home/pi/redacted-discord-bot/redacted-discord-bot-main/_build/prod/rel/app/bin/app start
User=pi
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Create a mix release
# Before doing this make sure your environment has the necessary variables that are accessible. I recommend using direnv to manage this
MIX_ENV=prod mix release
Tell systemd about the new changes
# Reload the daemon (pronounce it with me de-mon) so it picks up on the .service file
sudo systemctl daemon-reload
# Start your new service
sudo systemctl start torrent_top_10
# Check the status of the service to make sure it's healthy
sudo systemctl status torrent_top_10
# Here's some example output
● torrent_top_10.service - Run top 10 torrent service
Loaded: loaded (/lib/systemd/system/torrent_top_10.service; e
Active: active (running) since Sun 2021-12-12 18:31:44 MST; 5
Main PID: 18293 (beam.smp)
Tasks: 27 (limit: 4915)
CGroup: /system.slice/torrent_top_10.service
├─18293 /home/pi/redacted-discord-bot/redacted-discor
├─18334 erl_child_setup 1024
├─18370 inet_gethost 4
└─18371 inet_gethost 4
Thoughts
I'm curious to see how the daemon
option would work and if that would be better than passing start
to the mix release.
# Check usage from the app
/home/pi/redacted-discord-bot/redacted-discord-bot-main/_build/prod/rel/app/bin/app
Usage: app COMMAND [ARGS]
The known commands are:
start Starts the system
start_iex Starts the system with IEx attached
daemon Starts the system as a daemon
daemon_iex Starts the system as a daemon with IEx attached
eval "EXPR" Executes the given expression on a new, non-booted system
rpc "EXPR" Executes the given expression remotely on the running system
remote Connects to the running system via a remote shell
restart Restarts the running system via a remote command
stop Stops the running system via a remote command
pid Prints the operating system PID of the running system via a remote command
version Prints the release name and version to be booted