Overhaul OpenRC service file and disable busy wait by default #834
2 changed files with 51 additions and 17 deletions
|
@ -19,6 +19,9 @@ Environment="MIX_ENV=prod"
|
||||||
; Don't listen epmd on 0.0.0.0
|
; Don't listen epmd on 0.0.0.0
|
||||||
Environment="ERL_EPMD_ADDRESS=127.0.0.1"
|
Environment="ERL_EPMD_ADDRESS=127.0.0.1"
|
||||||
|
|
||||||
|
; Don't busy wait
|
||||||
|
Environment="ERL_AFLAGS=+sbwt none +sbwtdcpu none +sbwtdio none"
|
||||||
|
|
||||||
; Make sure that all paths fit your installation.
|
; Make sure that all paths fit your installation.
|
||||||
; Path to the home directory of the user running the Akkoma service.
|
; Path to the home directory of the user running the Akkoma service.
|
||||||
Environment="HOME=/var/lib/akkoma"
|
Environment="HOME=/var/lib/akkoma"
|
||||||
|
|
|
@ -1,23 +1,43 @@
|
||||||
#!/sbin/openrc-run
|
#!/sbin/openrc-run
|
||||||
supervisor=supervise-daemon
|
supervisor=supervise-daemon
|
||||||
command_user=akkoma:akkoma
|
|
||||||
command_background=1
|
|
||||||
# Ask process to terminate within 30 seconds, otherwise kill it
|
|
||||||
retry="SIGTERM/30/SIGKILL/5"
|
|
||||||
pidfile="/var/run/akkoma.pid"
|
|
||||||
directory=/opt/akkoma
|
|
||||||
healthcheck_delay=60
|
|
||||||
healthcheck_timer=30
|
|
||||||
no_new_privs="yes"
|
no_new_privs="yes"
|
||||||
|
pidfile="/var/run/akkoma.pid"
|
||||||
|
|
||||||
: ${akkoma_port:-4000}
|
# Ask process first to terminate itself within 60s, otherwise kill it
|
||||||
|
retry="SIGTERM/60/SIGKILL/5"
|
||||||
|
|
||||||
# Needs OpenRC >= 0.42
|
# if you really want to use start-stop-daemon instead,
|
||||||
#respawn_max=0
|
# also put the following in the config:
|
||||||
#respawn_delay=5
|
# command_background=1
|
||||||
|
|
||||||
|
# Adjust defaults as needed in /etc/conf.d/akkoma;
|
||||||
|
# no need to directly edit the service file
|
||||||
|
command_user="${command_user:-akkoma:akkoma}"
|
||||||
|
directory="${directory:-/var/lib/akkoma/akkoma}"
|
||||||
|
akkoma_port="${akkoma_port:-4000}"
|
||||||
|
# whether to allow connecting a remote exlixir shell to the running Akkoma instance
|
||||||
|
akkoma_console=${akkoma_console:-NO}
|
||||||
|
|
||||||
|
output_log="${output_log:-/var/log/akkoma}"
|
||||||
|
error_log="${error_log:-/var/log/akkoma}"
|
||||||
|
|
||||||
|
# 0 means unlimited restarts
|
||||||
|
respawn_max="${respawn_max:-0}"
|
||||||
|
respawn_delay="${respawn_delay:-5}"
|
||||||
|
# define respawn period to only count crashes within a
|
||||||
|
# sliding time window towards respawn_max, e.g.:
|
||||||
|
# respawn_period=2850
|
||||||
|
|
||||||
|
healthcheck_delay="${healthcheck_delay:-60}"
|
||||||
|
healthcheck_timer="${healthcheck_timer:-30}"
|
||||||
|
|
||||||
|
MIX_ENV=prod
|
||||||
|
ERL_EPMD_ADDRESS="${ERL_EPMD_ADDRESS:-127.0.0.1}"
|
||||||
|
ERL_AFLAGS="${ERL_AFLAGS:-+sbwt none +sbwtdcpu none +sbwtdio none}"
|
||||||
|
supervise_daemon_args="${supervise_daemon_args} --env MIX_ENV=${MIX_ENV}"
|
||||||
|
supervise_daemon_args="${supervise_daemon_args} --env ERL_EPMD_ADDRESS=${ERL_EPMD_ADDRESS}"
|
||||||
|
supervise_daemon_args="${supervise_daemon_args} --env ERL_AFLAGS='${ERL_AFLAGS}'"
|
||||||
|
|
||||||
# put akkoma_console=YES in /etc/conf.d/akkoma if you want to be able to
|
|
||||||
# connect to akkoma via an elixir console
|
|
||||||
if yesno "${akkoma_console}"; then
|
if yesno "${akkoma_console}"; then
|
||||||
command=elixir
|
command=elixir
|
||||||
command_args="--name akkoma@127.0.0.1 --erl '-kernel inet_dist_listen_min 9001 inet_dist_listen_max 9001 inet_dist_use_interface {127,0,0,1}' -S mix phx.server"
|
command_args="--name akkoma@127.0.0.1 --erl '-kernel inet_dist_listen_min 9001 inet_dist_listen_max 9001 inet_dist_use_interface {127,0,0,1}' -S mix phx.server"
|
||||||
|
@ -31,13 +51,24 @@ else
|
||||||
command_args="phx.server"
|
command_args="phx.server"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export MIX_ENV=prod
|
|
||||||
export ERL_EPMD_ADDRESS=127.0.0.1
|
|
||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
need nginx postgresql
|
need nginx postgresql
|
||||||
}
|
}
|
||||||
|
|
||||||
|
start_pre() {
|
||||||
|
# Ensure logfile ownership and perms are alright
|
||||||
|
checkpath --file --owner "$command_user" "$output_log" "$error_log" \
|
||||||
|
|| eerror "Logfile(s) not owned by $command_user, or not a file!"
|
||||||
|
checkpath --writable "$output_log" "$error_log" \
|
||||||
|
|| eerror "Logfile(s) not writable!"
|
||||||
|
|
||||||
|
# If a recompile is needed perform it with lowest prio
|
||||||
|
# (delaying the actual start) to avoid hogging too much
|
||||||
|
# CPU from other services
|
||||||
|
cd "$directory"
|
||||||
|
doas -u "${command_user%%:*}" env MIX_ENV="$MIX_ENV" nice -n 19 "$command" compile
|
||||||
|
}
|
||||||
|
|
||||||
healthcheck() {
|
healthcheck() {
|
||||||
# put akkoma_health=YES in /etc/conf.d/akkoma if you want healthchecking
|
# put akkoma_health=YES in /etc/conf.d/akkoma if you want healthchecking
|
||||||
# and make sure you have curl installed
|
# and make sure you have curl installed
|
||||||
|
|
Loading…
Reference in a new issue