User Tools

Site Tools


developer_s_reference:autorun_script

Instructions

A) Setup autorun script: Put autorun_gameprod.sh in /home/aoi/
B) Setup autorun script to autorun:  Put autorun_gameprod.service in /etc/systemd/system/autorun_gameprod.service
C) Reload systemd and start the service
sudo systemctl daemon-reload
sudo systemctl enable --now autorun_gameprod.service
D)  Verify it stays up
sudo systemctl status autorun_gameprod.service
sudo journalctl -fu autorun_gameprod.service
E) Should just run now automatically upon boot up.
F) That said, to troubleshoot, or for reference:
To run AOI's autorun script: ./autorun &
To stop AOI's autorun script:  touch a file called .killscript in the same directory, which will stop the script the next time it autostarts the MUD.
To run AOI just one time:  ./test &

Two files needed; reference copies below

1) autorun_gameprod.sh

steve@aoi:/home/aoi$ cat autorun_gameprod.sh #!/bin/bash ############################################################################## # CircleMUD 2.2-compatible autorun script # Adapted from the Circle 3.1 script by J. Elson et al. (1996) ############################################################################## #hey to anyone modifying this.. there's a “cd bin” command to get into #the right dir before starting the binary. this is b/c running bin/test #breaks something that expect our current directory to be bin/ not ./ #so… make sure to review that & edit if you are trying to use this script #to launch any other instance of AOI in a different dir. #love, #steve #5-31-2025 # — TUNE THESE ————————————————————- PORT=4000 # port your MUD listens on BIN=test # relative path to the server binary FLAGS= # default runtime flags (-q = quiet boot) BACKLOGS=9 # how many rotated syslogs to keep

# log-file pattern list: name:maxlines(0 = unlimited):grep-pattern LOGFILES=' delete:0:self-delete dts:0:death trap rip:0:killed restarts:0:Running levels:0:advanced rentgone:0:equipment\ lost usage:0:usage newplayers:0:new\ player errors:0:SYSERR godcmds:0:(GC) badpws:0:Bad\ PW ' LEN_CRASHLOG=30 # lines of syslog to save as syslog.CRASH # —————————————————————————

ulimit -c unlimited # keep core dumps umask 077 # log files ⇒ rw——-

proc_syslog () {

  [ -s syslog ] || return
  # make crash snapshot
  [ "$LEN_CRASHLOG" -gt 0 ] && tail -n "$LEN_CRASHLOG" syslog > syslog.CRASH
  OLD_IFS=$IFS; IFS=$'\n'
  for rec in $LOGFILES; do
      name=log/$(echo "$rec" | cut -d: -f1)
      len=$(echo  "$rec" | cut -d: -f2)
      pat=$(echo  "$rec" | cut -d: -f3-)
      grep -F "$pat" syslog >> "$name"
      # truncate if needed
      [ "$len" -gt 0 ] && tail -n "$len" "$name" > "$name.tmp" && mv "$name.tmp" "$name"
  done
  IFS=$OLD_IFS
  # rotate syslogs
  if [ -s log/syslog."$BACKLOGS" ]; then
      idx=$((BACKLOGS+1))
  else
      idx=1; while [ -s log/syslog."$idx" ]; do idx=$((idx+1)); done
  fi
  for ((y=idx; y>1; y--)); do mv -f log/syslog.$((y-1)) log/syslog.$y 2>/dev/null; done
  mv -f syslog log/syslog.1

}

# If a stale syslog exists (unclean shutdown), rotate it first [ -s syslog ] && echo “autorun noticed unclean exit $(date)” » syslog && proc_syslog

echo “==⇒ Starting autorun loop on port $PORT; binary $BIN”

while :; do

  date > syslog
  echo "Running $BIN $FLAGS $PORT" >> syslog

(

  cd bin || { echo "autorun: cannot cd to bin" >> syslog; exit 1; }
  ./"$BIN" $FLAGS $PORT >> ../syslog 2>&1

)

  # honour .killscript / .fastboot / pause sentinel files
  if [ -e .killscript ]; then
      echo "$(date) : autorun killed" >> syslog
      rm .killscript
      proc_syslog
      exit 0
  fi

#default is typically 60, not 15. but this makes us come back faster after crashes.

  [ -e .fastboot ] && delay=5 || delay=15
  rm -f .fastboot
  sleep "$delay"
  while [ -e pause ]; do sleep 60; done
  proc_syslog

done ''

2) autorun_gameprod.service

steve@aoi:/home/aoi$ cat autorun_gameprod.service # /etc/systemd/system/autorun_gameprod.service [Unit] Description=AOI CircleMUD production instance After=network.target

[Service] Type=simple #— run as an unprivileged account if it exists — #User=aoi WorkingDirectory=/home/aoi ExecStart=/home/aoi/autorun_gameprod.sh

# Restart autorun itself if it ever dies Restart=always RestartSec=5

# Journald handles all logging; no separate files needed StandardOutput=journal StandardError=journal

# (optional hardening-flags you can re-add once it starts) #NoNewPrivileges=yes #PrivateTmp=yes #ProtectSystem=full #ProtectHome=yes

[Install] WantedBy=multi-user.target

developer_s_reference/autorun_script.txt · Last modified: 2025/05/31 10:03 by adminsteve

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki