diff --git a/LICENSE b/LICENSE index 486036a..5f3d407 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2017 +Copyright jakerunsdnd (c) 2017-2018 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/daemon.sh b/daemon.sh deleted file mode 100755 index 0dfad60..0000000 --- a/daemon.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -PATH="$PATH:/user/bin" -LOCK='./daemon.lock' -LOG='./pidaemon.log' - -# Check for a nodemon process, and if there isn't one, run it -if [[ -f $LOCK ]]; then - echo "$(date): WARN Already summoning!" >> $LOG -else - touch $LOCK - pgrep node -a || absent=true - if [[ $absent ]]; then - echo "$(date): WARN No nodemon found, summoning..." >> $LOG - npm run daemon >> $LOG & - else - echo "$(date): OK Running as expected" >> $LOG - fi - rm $LOCK -fi diff --git a/service/README.txt b/service/README.txt new file mode 100644 index 0000000..eb90d15 --- /dev/null +++ b/service/README.txt @@ -0,0 +1,13 @@ +Welcome to the service directory! + +This is currently under construction. I haven't +even run these scripts yet, but I'm working on +a sweet little perma-live process for tavernbot, +which will make updating it super easy. + +For now, these random scripts will sit here +with no indication whatsoever as to how they +should be used. Documentation and tested +versions of the scripts coming soon! + +Cheers. diff --git a/service/init-script.sh b/service/init-script.sh new file mode 100755 index 0000000..b583f09 --- /dev/null +++ b/service/init-script.sh @@ -0,0 +1,101 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: Tavernbot node.js discord bot +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start daemon at boot time +# Description: Enable service provided by daemon. +### END INIT INFO + +dir="/path/to/tavernbot" +cmd="node bot.js" +user="node" #Set this appropriately. Can't test on the system I wrote this on because I hate my own free time I guess + +name=`basename $0` +pid_file="/var/run/$name.pid" +stdout_log="/var/log/$name.log" +stderr_log="/var/log/$name.err" + +get_pid() { + cat "$pid_file" +} + +is_running() { + [ -f "$pid_file" ] && ps -p `get_pid` > /dev/null 2>&1 +} + +case "$1" in + start) + if is_running; then + echo "Already started" + else + echo "Starting $name" + cd "$dir" + if [ -z "$user" ]; then + sudo $cmd >> "$stdout_log" 2>> "$stderr_log" & + else + #sudo touch $stdout_log $stderr_log + #sudo chown $user $stdout_log $stderr_log + sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" & + fi + echo $! > "$pid_file" + if ! is_running; then + echo "Unable to start, see $stdout_log and $stderr_log" + exit 1 + fi + fi + ;; + stop) + if is_running; then + echo -n "Stopping $name.." + kill `get_pid` + for i in 1 2 3 4 5 6 7 8 9 10 + # for i in `seq 10` + do + if ! is_running; then + break + fi + + echo -n "." + sleep 1 + done + echo + + if is_running; then + echo "Not stopped; may still be shutting down or shutdown may have failed" + exit 1 + else + echo "Stopped" + if [ -f "$pid_file" ]; then + rm "$pid_file" + fi + fi + else + echo "Not running" + fi + ;; + restart) + $0 stop + if is_running; then + echo "Unable to stop, will not attempt to start" + exit 1 + fi + $0 start + ;; + status) + if is_running; then + echo "Running" + else + echo "Stopped" + exit 1 + fi + ;; + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac + +exit 0 diff --git a/service/tavernbot.service b/service/tavernbot.service new file mode 100644 index 0000000..455371f --- /dev/null +++ b/service/tavernbot.service @@ -0,0 +1,14 @@ +[Unit] +Description=Tavernbot: The best RPG bot for Discord +Documentation=https://github.com/jakerunsdnd/tavernbot +After=network.target + +[Service] +Environment=NODE_ENV=production +Type=simple +User=pi +ExecStart=/usr/bin/node /opt/tavernbot/bot.js +Restart=on-failure + +[Install] +WantedBy=multi-user.target