1
0
mirror of https://github.com/nttgin/BGPalerter.git synced 2024-05-19 06:50:08 +00:00
Files
nttgin-BGPalerter/docs/linux-service.md
2020-08-02 17:54:10 +02:00

157 lines
4.0 KiB
Markdown

## Run BGPalerter as a Linux Service
If you are interested in running this application as a service on a Linux server here is a basic guide covering how to do that. This process works for RHEL 7 based Linux installations. It will likely work very similiarly on other systemctl enabled installations.
### Create directory for the application to reside
Create a user for BGPalerter
```bash
adduser bgpalerter
sudo su bgpalerter
```
If this is a new installation, download the BGPalerter binary in the home of the newly created user and execute it:
```
cd /home/bgpalerter
wget https://github.com/nttgin/BGPalerter/releases/latest/download/bgpalerter-linux-x64
chmod +x bgpalerter-linux-x64
./bgpalerter-linux-x64
```
The auto-configuration will start at the end of which all the needed files will be created.
If this is an existing install simply move the files of your existing install into this directory `mv -t /home/bgpalerter bgpalerter-linux-x64 bgpalerter.pid config.yml prefixes.yml`
The application will also create `logs` and `src` subdirectories here if needed.
### Create systemd service file
Next you need to create the systemd service file.
`sudo vi /etc/systemd/system/bgpalerter.service`
The contents of this file should be as follows:
```
[Unit]
Description=BGPalerter
After=network.target
[Service]
Type=simple
Restart=on-failure
User=bgpalerter
WorkingDirectory=/home/bgpalerter
ExecStart=/home/bgpalerter/bgpalerter-linux-x64
[Install]
WantedBy=multi-user.target
```
### Reload systemd
Reload systemd to register the new configuration.
`systemctl daemon-reload`
### Enable and start the service
Enable BGPalerter to start at boot and then start the service.
`systemctl enable bgpalerter`
`systemctl start bgpalerter`
### Automatic Updates
Enable automatic updates.
`cd /home/bgpalerter`
`vi upgrade.sh`
The file needs to be executable
```
chmod +x upgrade.sh
chown bgpalerter:bgpalerter /home/bgpalerter/upgrade.sh
```
The contents of this file should be as follows:
```
#!/usr/bin/env bash
#If log file does not exist, create it
if [ ! -f /home/bgpalerter/logs/upgrade.log ]; then
touch /home/bgpalerter/logs/upgrade.log
chown bgpalerter:bgpalerter /home/bgpalerter/logs/upgrade.log
fi
#Log everything if executing manually
exec 1> /home/bgpalerter/logs/upgrade.log 2>&1
set -vex
PS4='+\t '
#Download the latest version and save it to a temp file
wget -O bgpalerter-linux-x64.tmp https://github.com/nttgin/BGPalerter/releases/latest/download/bgpalerter-linux-x64
#Set permissions and ownership to execute the file and capture the version
chmod +x bgpalerter-linux-x64.tmp
chown -R bgpalerter:bgpalerter /home/bgpalerter/
#Set variables to compare versions
if [ -f bgpalerter-linux-x64 ]; then
#If a file exists already
v1=$(./bgpalerter-linux-x64 -v)
v2=$(./bgpalerter-linux-x64.tmp -v)
else
#If the file does not exist - For testing purposes
v1=$"0"
v2=$(./bgpalerter-linux-x64.tmp -v)
fi
#If the versions are not the same
if [ "$v1" == "0" ];then
#Rename the temp file
mv bgpalerter-linux-x64.tmp bgpalerter-linux-x64
#Restart the service
systemctl restart bgpalerter
#Pause for one second for service to fully start
sleep 1
elif [ "$v1" != "$v2" ];then
#Rename the old binary and append the version
mv bgpalerter-linux-x64 "bgpalerter-linux-x64-$v1"
#Rename the temp file
mv bgpalerter-linux-x64.tmp bgpalerter-linux-x64
#Restart the service
systemctl restart bgpalerter
#Pause for one second for service to fully start
sleep 1
else
#If the versions are the same - delete the temp file
rm bgpalerter-linux-x64.tmp
fi
#Log service status
systemctl status bgpalerter -l
#Delete renamed binaries older than 60 days
find -type f -name 'bgpalerter-linux-x64-*' -mtime +60 -delete
#Delete log file if larger than 5MB
find /home/bgpalerter/logs/ -type f -name "upgrade.log" -size +5M -delete
```
Configure a cron job to run, in this case, weekly.
`crontab -e`
The contents of this file should be as follows:
```
0 0 * * 0 /home/bgpalerter/bgpalerter/upgrade.sh
```