-
-
Save infostreams/69f73ae6655e1fa6193f to your computer and use it in GitHub Desktop.
#! /bin/sh | |
### BEGIN INIT INFO | |
# Provides: gogs | |
# Required-Start: $remote_fs $syslog | |
# Required-Stop: $remote_fs $syslog | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: Git repository manager Gogs | |
# Description: Starts and stops the self-hosted git repository manager Gogs | |
### END INIT INFO | |
# PATH should only include /usr/* if it runs after the mountnfs.sh script | |
PATH=/sbin:/usr/sbin:/bin:/usr/bin | |
DESC="Git repository manager Gogs" | |
NAME=gogs | |
# DIR is the gogs installation directory. Change if necessary. | |
DIR=/etc/gogs/ | |
DAEMON=$DIR$NAME | |
DAEMON_ARGS="web" | |
PIDFILE=/var/run/$NAME.pid | |
SCRIPTNAME=/etc/init.d/$NAME | |
# The daemon will be run as this user | |
USER=git | |
HOME=$(grep "^$USER:" /etc/passwd | cut -d: -f6) | |
USER_ID=$(id -u $USER) | |
GROUP_ID=$(id -g $USER) | |
# Exit if the package is not installed | |
[ -x "$DAEMON" ] || exit 0 | |
# Read configuration variable file if it is present | |
[ -r /etc/default/$NAME ] && . /etc/default/$NAME | |
# Load the VERBOSE setting and other rcS variables | |
. /lib/init/vars.sh | |
# Define LSB log_* functions. | |
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present | |
# and status_of_proc is working. | |
. /lib/lsb/init-functions | |
# | |
# Function that starts the daemon/service | |
# | |
do_start() | |
{ | |
# Return | |
# 0 if daemon has been started | |
# 1 if daemon was already running | |
# 2 if daemon could not be started | |
export USER HOME | |
start-stop-daemon --start --pidfile $PIDFILE --make-pidfile --user $USER --chdir $DIR --exec $DAEMON --test > /dev/null \ | |
|| return 1 | |
start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $USER --chdir $DIR --chuid $USER_ID:$GROUP_ID --exec $DAEMON -- \ | |
$DAEMON_ARGS \ | |
|| return 2 | |
} | |
# | |
# Function that stops the daemon/service | |
# | |
do_stop() | |
{ | |
# Return | |
# 0 if daemon has been stopped | |
# 1 if daemon was already stopped | |
# 2 if daemon could not be stopped | |
# other if a failure occurred | |
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME | |
RETVAL="$?" | |
[ "$RETVAL" = 2 ] && return 2 | |
# Wait for children to finish too if this is a daemon that forks | |
# and if the daemon is only ever run from this initscript. | |
# If the above conditions are not satisfied then add some other code | |
# that waits for the process to drop all resources that could be | |
# needed by services started subsequently. A last resort is to | |
# sleep for some time. | |
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON | |
[ "$?" = 2 ] && return 2 | |
# Many daemons don't delete their pidfiles when they exit. | |
rm -f $PIDFILE | |
return "$RETVAL" | |
} | |
# | |
# Function that sends a SIGHUP to the daemon/service | |
# | |
do_reload() { | |
# | |
# If the daemon can reload its configuration without | |
# restarting (for example, when it is sent a SIGHUP), | |
# then implement that here. | |
# | |
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME | |
return 0 | |
} | |
case "$1" in | |
start) | |
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" | |
do_start | |
case "$?" in | |
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; | |
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; | |
esac | |
;; | |
stop) | |
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" | |
do_stop | |
case "$?" in | |
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; | |
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; | |
esac | |
;; | |
status) | |
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? | |
;; | |
#reload|force-reload) | |
# | |
# If do_reload() is not implemented then leave this commented out | |
# and leave 'force-reload' as an alias for 'restart'. | |
# | |
#log_daemon_msg "Reloading $DESC" "$NAME" | |
#do_reload | |
#log_end_msg $? | |
#;; | |
restart|force-reload) | |
# | |
# If the "reload" option is implemented then remove the | |
# 'force-reload' alias | |
# | |
log_daemon_msg "Restarting $DESC" "$NAME" | |
do_stop | |
case "$?" in | |
0|1) | |
do_start | |
case "$?" in | |
0) log_end_msg 0 ;; | |
1) log_end_msg 1 ;; # Old process is still running | |
*) log_end_msg 1 ;; # Failed to start | |
esac | |
;; | |
*) | |
# Failed to stop | |
log_end_msg 1 | |
;; | |
esac | |
;; | |
*) | |
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 | |
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 | |
exit 3 | |
;; | |
esac | |
: |
I can confirm that it works well on my Debian 7 box. Thank you!
I can confirm it works on my Ubuntu 14.04 x64.
Ahh finally. Spent all day trying to get this to work with Ubuntu 14.04 LTS and this did the charm.. thanks a lot!
Hello, I tested it on raspbian with Gogs from source, based on Go 1.4.2.
I do the followings steps :
- create a symbolic link :
sudo ln -s /home/git/go/src/github.com/gogits/gogs/gogs /usr/sbin/gogs
- create the init.d script :
sudo nano /etc/init.d/gogs
- paste your script, setting the DIR variable with :
DIR=/home/git/go/src/github.com/gogits/gogs/
- set the correct mod :
sudo chmod +x /etc/init.d/gogs
- test it
sudo service gogs start
And it works! I spent 2 nights on it, and you saved my next one with the export USER HOME
.
Thanks a lot ๐
And it works! I spent 2 nights on it, and you saved my next one with the export USER HOME.
Thanks a lot ๐
@nioc Thanks for saving my night! Works without any modification on Ubuntu 14.04 installed from source.
It works for Ubuntu 14.04.3 LTS (installed in AWS - Amazon)
Thank you!!!
Thanks @nioc you got it working with the points you have mentioned. (y) I am running it on pi3
This works on Debian Wheezy. Not tested with other distributions. Let me know if it works?