Эх сурвалжийг харах

Upstart script with cron watchdog to auto-restart

Innocenty Enikeew 9 жил өмнө
parent
commit
cbaa2d756d
5 өөрчлөгдсөн 54 нэмэгдсэн , 3 устгасан
  1. 2 1
      .gitignore
  2. 16 2
      chatikbot.lisp
  3. 17 0
      chatikbot.upstart.conf
  4. 9 0
      kill-stale.sh
  5. 10 0
      start.lisp

+ 2 - 1
.gitignore

@@ -3,4 +3,5 @@ settings.lisp
 chart.png
 db.sqlite
 *.fasl
-*~
+*~
+.watchdog

+ 16 - 2
chatikbot.lisp

@@ -563,6 +563,15 @@
                                  period))) ;; Update last-id, next-fetch and period
     (error (e) (log:error "~A" e))))
 
+(defun process-watchdog ()
+  (ignore-errors
+    (close
+     (open (merge-pathnames ".watchdog"
+                            (asdf:component-pathname
+                             (asdf:find-system '#:chatikbot)))
+           :direction :output
+           :if-exists :supersede
+           :if-does-not-exist :create)))))
 
 (defvar *save-settings-lock* (bordeaux-threads:make-lock "save-settings-lock")
   "Lock for multithreading access to write settings file")
@@ -586,7 +595,8 @@
                       process-latest-checkins
                       process-rates
                       process-feeds
-                      process-walls) "Enabled schedules")
+                      process-walls
+                      process-watchdog) "Enabled schedules")
 
 (defun start ()
   ;; Clear prev threads
@@ -626,4 +636,8 @@
   ;; Start getUpdates thread
   (bordeaux-threads:make-thread
    (lambda () (loop-with-error-backoff #'process-updates))
-   :name "process-updates"))
+   :name "process-updates")
+
+  ;; Notify admins
+  (dolist (admin *admins*)
+    (telegram-send-message admin (format nil "chatikbot started at ~A" (format-ts (local-time:now))))))

+ 17 - 0
chatikbot.upstart.conf

@@ -0,0 +1,17 @@
+# chatikbot - chatikbot server
+#
+# Telegram bot 'chatikbot'
+
+description "'chatikbot' telegram bot"
+
+#start on runlevel [2345]
+start on started network-services
+stop on runlevel [06]
+
+respawn
+respawn limit 3 180
+
+setuid enikesha
+console log
+chdir /home/enikesha/quicklisp/local-projects/chatikbot
+exec /home/enikesha/ccl/armcl --load start.lisp

+ 9 - 0
kill-stale.sh

@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Should be added to cron like this:
+# * * * * * /home/enikesha/quicklisp/local-projects/chatikbot/kill-stale.sh
+
+DIR="$(dirname "$0")"
+test `find "$DIR/.watchdog" -mmin +2` || exit
+# Kill exising process
+pid=`lsof -iTCP:4016 -sTCP:LISTEN -t` && kill $pid

+ 10 - 0
start.lisp

@@ -0,0 +1,10 @@
+;; Set up SWANK
+(ql:quickload 'swank)
+(swank:create-server :port 4016 :dont-close t)
+
+;; Start chatikbot
+(ql:quickload 'chatikbot)
+(chatikbot:start)
+
+;; Sleep indefinitely
+(loop (sleep 1))