FreeBSD Bugzilla – Attachment 173478 Details for
Bug 208793
www/gitlab: gitlab did not start on boot
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
rc.d script for gitlab adapted to FreeBSD
gitlab (text/plain), 12.28 KB, created by
Horst Kapfenberger
on 2016-08-09 21:38:50 UTC
(
hide
)
Description:
rc.d script for gitlab adapted to FreeBSD
Filename:
MIME Type:
Creator:
Horst Kapfenberger
Created:
2016-08-09 21:38:50 UTC
Size:
12.28 KB
patch
obsolete
>#! /bin/sh > ># $FreeBSD: head/www/gitlab/files/gitlab.in 417194 2016-06-21 08:36:56Z tz $ > ># Maintainer: Torsten Zuehlsdorff <ports@toco-domains.de> ># Based on work of: @charlienewey, rovanion.luckey@gmail.com, @randx > ># PROVIDE: gitlab ># REQUIRE: LOGIN ># KEYWORD: shutdown ># ># Add the following line to /etc/rc.conf to enable GitLab: ># ># gitlab_enable="YES" > >PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" > >. /etc/rc.subr > >name="gitlab" >rcvar="gitlab_enable" >status_cmd="print_status" >start_cmd="start_gitlab" >stop_cmd="stop_gitlab" >restart_cmd="restart_gitlab" >extra_commands="reload status" >reload_cmd="reload_gitlab" > >load_rc_config $name > >: ${gitlab_enable:="NO"} >: ${gitlab_user:="git"} >: ${gitlab_env:="production"} > >run_env="env RAILS_ENV=$gitlab_env" > ># Script variable names should be lower-case not to conflict with ># internal /bin/sh variables such as PATH, EDITOR or SHELL. >app_root="/usr/local/www/gitlab" >pid_path="$app_root/tmp/pids" >socket_path="$app_root/tmp/sockets" >rails_socket="$socket_path/gitlab.socket" >workhorse_socket=$socket_path/gitlab-workhorse.socket >web_server_pid_path="$pid_path/unicorn.pid" >sidekiq_pid_path="$pid_path/sidekiq.pid" >mail_room_enabled=false >mail_room_pid_path="$pid_path/mail_room.pid" >gitlab_workhorse_dir=$(cd $app_root/../gitlab-workhorse && pwd) >gitlab_workhorse_pid_path="$pid_path/gitlab-workhorse.pid" >#gitlab_workhorse_options="-listenUmask 448 -listenNetwork unix -listenAddr $workhorse_socket -authSocket $rails_socket -documentRoot $app_root/public" >gitlab_workhorse_options="-listenNetwork unix -listenAddr $workhorse_socket -authSocket $rails_socket -documentRoot $app_root/public" >gitlab_workhorse_log="$app_root/log/gitlab-workhorse.log" > >### Init Script functions > >## Gets the pids from the files >check_pids(){ > if ! mkdir -p "$pid_path"; then > echo "Could not create the path $pid_path needed to store the pids." > exit 1 > fi > # If there exists a file which should hold the value of the Unicorn pid: read it. > if [ -f "$web_server_pid_path" ]; then > wpid=$(cat "$web_server_pid_path") > else > wpid=0 > fi > if [ -f "$sidekiq_pid_path" ]; then > spid=$(cat "$sidekiq_pid_path") > else > spid=0 > fi > if [ -f "$gitlab_workhorse_pid_path" ]; then > hpid=$(cat "$gitlab_workhorse_pid_path") > else > hpid=0 > fi > if [ "$mail_room_enabled" = true ]; then > if [ -f "$mail_room_pid_path" ]; then > mpid=$(cat "$mail_room_pid_path") > else > mpid=0 > fi > fi >} > >## Called when we have started the two processes and are waiting for their pid files. >wait_for_pids(){ > # We are sleeping a bit here mostly because sidekiq is slow at writing its pid > i=0; > while [ ! -f $web_server_pid_path ] || [ ! -f $sidekiq_pid_path ] || [ ! -f $gitlab_workhorse_pid_path ] || { [ "$mail_room_enabled" = true ] && [ ! -f $mail_room_pid_path ]; }; do > sleep 0.1; > i=$((i+1)) > if [ $((i%10)) = 0 ]; then > echo -n "." > elif [ $((i)) = 301 ]; then > echo "Waited 30s for the processes to write their pids, something probably went wrong." > exit 1; > fi > done > echo >} > ># We use the pids in so many parts of the script it makes sense to always check them. ># Only after start() is run should the pids change. Sidekiq sets its own pid. >check_pids > > >## Checks whether the different parts of the service are already running or not. >check_status(){ > check_pids > # If the web server is running kill -0 $wpid returns true, or rather 0. > # Checks of *_status should only check for == 0 or != 0, never anything else. > if [ $wpid -ne 0 ]; then > kill -0 "$wpid" 2>/dev/null > web_status="$?" > else > web_status="-1" > fi > if [ $spid -ne 0 ]; then > kill -0 "$spid" 2>/dev/null > sidekiq_status="$?" > else > sidekiq_status="-1" > fi > if [ $hpid -ne 0 ]; then > kill -0 "$hpid" 2>/dev/null > gitlab_workhorse_status="$?" > else > gitlab_workhorse_status="-1" > fi > if [ "$mail_room_enabled" = true ]; then > if [ $mpid -ne 0 ]; then > kill -0 "$mpid" 2>/dev/null > mail_room_status="$?" > else > mail_room_status="-1" > fi > fi > if [ $web_status = 0 ] && [ $sidekiq_status = 0 ] && [ $gitlab_workhorse_status = 0 ] && { [ "$mail_room_enabled" != true ] || [ $mail_room_status = 0 ]; }; then > gitlab_status=0 > else > # http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html > # code 3 means 'program is not running' > gitlab_status=3 > fi >} > >## Check for stale pids and remove them if necessary. >check_stale_pids(){ > check_status > # If there is a pid it is something else than 0, the service is running if > # *_status is == 0. > if [ "$wpid" != "0" ] && [ "$web_status" != "0" ]; then > echo "Removing stale Unicorn web server pid. This is most likely caused by the web server crashing the last time it ran." > if ! rm "$web_server_pid_path"; then > echo "Unable to remove stale pid, exiting." > exit 1 > fi > fi > if [ "$spid" != "0" ] && [ "$sidekiq_status" != "0" ]; then > echo "Removing stale Sidekiq job dispatcher pid. This is most likely caused by Sidekiq crashing the last time it ran." > if ! rm "$sidekiq_pid_path"; then > echo "Unable to remove stale pid, exiting" > exit 1 > fi > fi > if [ "$hpid" != "0" ] && [ "$gitlab_workhorse_status" != "0" ]; then > echo "Removing stale gitlab-workhorse pid. This is most likely caused by gitlab-workhorse crashing the last time it ran." > if ! rm "$gitlab_workhorse_pid_path"; then > echo "Unable to remove stale pid, exiting" > exit 1 > fi > fi > if [ "$mail_room_enabled" = true ] && [ "$mpid" != "0" ] && [ "$mail_room_status" != "0" ]; then > echo "Removing stale MailRoom job dispatcher pid. This is most likely caused by MailRoom crashing the last time it ran." > if ! rm "$mail_room_pid_path"; then > echo "Unable to remove stale pid, exiting" > exit 1 > fi > fi >} > >## If no parts of the service is running, bail out. >exit_if_not_running(){ > check_stale_pids > if [ "$web_status" != "0" ] && [ "$sidekiq_status" != "0" ] && [ "$gitlab_workhorse_status" != "0" ] && { [ "$mail_room_enabled" != true ] || [ "$mail_room_status" != "0" ]; }; then > echo "GitLab is not running." > exit > fi >} > >## Starts Unicorn and Sidekiq if they're not running. >start_gitlab() { > check_stale_pids > > # Then check if the service is running. If it is: don't start again. > if [ "$web_status" = "0" ]; then > echo "The Unicorn web server already running with pid $wpid, not restarting." > else > echo "Starting GitLab Unicorn" > # Remove old socket if it exists > rm -f "$socket_path"/gitlab.socket 2>/dev/null > # unicorn may break the current process on freebsd during > # deamonizing (defunct exists until new master has prefilled > # caches) - therefore start itself is decoupled > /usr/sbin/daemon -u ${gitlab_user} $run_env ${app_root}/bin/web start > # > fi > > # If sidekiq is already running, don't start it again. > if [ "$sidekiq_status" = "0" ]; then > echo "The Sidekiq job dispatcher is already running with pid $spid, not restarting" > else > echo "Starting GitLab Sidekiq" > su - $gitlab_user -c "$run_env ${app_root}/bin/background_jobs start" > fi > > if [ "$gitlab_workhorse_status" = "0" ]; then > echo "The gitlab-workhorse is already running with pid $spid, not restarting" > else > # No need to remove a socket, gitlab-workhorse does this itself. > # Because gitlab-workhorse has multiple executables we need to fix > # the PATH. > echo "Starting gitlab-workhorse" > cd ${gitlab_workhorse_dir} && > /usr/sbin/daemon -p $gitlab_workhorse_pid_path \ > -u $gitlab_user -t gitlab-workhorse $run_env \ > $gitlab_workhorse_dir/gitlab-workhorse $gitlab_workhorse_options \ > >> $gitlab_workhorse_log 2>&1 > fi > > if [ "$mail_room_enabled" = true ]; then > # If MailRoom is already running, don't start it again. > if [ "$mail_room_status" = "0" ]; then > echo "The MailRoom email processor is already running with pid $mpid, not restarting" > else > echo "Starting GitLab MailRoom" > su - $gitlab_user -c "$run_env ${app_root}/bin/mail_room start" > fi > fi > > # Wait for the pids to be planted > wait_for_pids > # Finally check the status to tell wether or not GitLab is running > print_status >} > >## Asks Unicorn, Sidekiq and MailRoom if they would be so kind as to stop, if not kills them. >stop_gitlab() { > exit_if_not_running > > if [ "$web_status" = "0" ]; then > echo "Shutting down GitLab Unicorn" > su - $gitlab_user -c "$run_env ${app_root}/bin/web stop" > [ -S ${rails_socket} ] && rm -f ${rails_socket} > fi > if [ "$sidekiq_status" = "0" ]; then > echo "Shutting down GitLab Sidekiq" > su - $gitlab_user -c "$run_env ${app_root}/bin/background_jobs stop" > fi > if [ "$gitlab_workhorse_status" = "0" ]; then > echo "Shutting down gitlab-workhorse" > kill -- $(cat $gitlab_workhorse_pid_path) > [ -S ${workhorse_socket} ] && rm -f ${workhorse_socket} > fi > if [ "$mail_room_enabled" = true ] && [ "$mail_room_status" = "0" ]; then > echo "Shutting down GitLab MailRoom" > su - $gitlab_user -c "$run_env ${app_root}/bin/mail_room stop" > fi > > # If something needs to be stopped, lets wait for it to stop. Never use SIGKILL in a script. > while [ "$web_status" = "0" ] || [ "$sidekiq_status" = "0" ] || [ "$gitlab_workhorse_status" = "0" ] || { [ "$mail_room_enabled" = true ] && [ "$mail_room_status" = "0" ]; }; do > sleep 1 > check_status > printf "." > if [ "$web_status" != "0" ] && [ "$sidekiq_status" != "0" ] && [ "$gitlab_workhorse_status" != "0" ] && { [ "$mail_room_enabled" != true ] || [ "$mail_room_status" != "0" ]; }; then > printf "\n" > break > fi > done > > sleep 1 > # Cleaning up unused pids > rm "$web_server_pid_path" 2>/dev/null > # rm "$sidekiq_pid_path" 2>/dev/null # Sidekiq seems to be cleaning up its own pid. > rm -f "$gitlab_workhorse_pid_path" > if [ "$mail_room_enabled" = true ]; then > rm "$mail_room_pid_path" 2>/dev/null > fi > > print_status >} > >## Prints the status of GitLab and its components. >print_status() { > check_status > if [ "$web_status" != "0" ] && [ "$sidekiq_status" != "0" ] && [ "$gitlab_workhorse_status" != "0" ] && { [ "$mail_room_enabled" != true ] || [ "$mail_room_status" != "0" ]; }; then > echo "GitLab is not running." > return > fi > if [ "$web_status" = "0" ]; then > echo "The GitLab Unicorn web server with pid $wpid is running." > else > printf "The GitLab Unicorn web server is \033[31mnot running\033[0m.\n" > fi > if [ "$sidekiq_status" = "0" ]; then > echo "The GitLab Sidekiq job dispatcher with pid $spid is running." > else > printf "The GitLab Sidekiq job dispatcher is \033[31mnot running\033[0m.\n" > fi > if [ "$gitlab_workhorse_status" = "0" ]; then > echo "The gitlab-workhorse with pid $hpid is running." > else > printf "The gitlab-workhorse is \033[31mnot running\033[0m.\n" > fi > if [ "$mail_room_enabled" = true ]; then > if [ "$mail_room_status" = "0" ]; then > echo "The GitLab MailRoom email processor with pid $mpid is running." > else > printf "The GitLab MailRoom email processor is \033[31mnot running\033[0m.\n" > fi > fi > if [ "$web_status" = "0" ] && [ "$sidekiq_status" = "0" ] && [ "$gitlab_workhorse_status" = "0" ] && { [ "$mail_room_enabled" != true ] || [ "$mail_room_status" = "0" ]; }; then > printf "GitLab and all its components are \033[32mup and running\033[0m.\n" > fi >} > >## Tells unicorn to reload its config and Sidekiq to restart >reload_gitlab(){ > exit_if_not_running > if [ "$wpid" = "0" ];then > echo "The GitLab Unicorn Web server is not running thus its configuration can't be reloaded." > exit 1 > fi > printf "Reloading GitLab Unicorn configuration... " > su - $gitlab_user -c "$run_env ${app_root}/bin/web reload" > echo "Done." > > echo "Restarting GitLab Sidekiq since it isn't capable of reloading its config..." > su - $gitlab_user -c "$run_env ${app_root}/bin/background_jobs restart" > > if [ "$mail_room_enabled" = true ]; then > echo "Restarting GitLab MailRoom since it isn't capable of reloading its config..." > su - $gitlab_user -c "$run_env ${app_root}/bin/mail_room restart" > fi > > wait_for_pids > print_status >} > >## Restarts Sidekiq and Unicorn. >restart_gitlab(){ > check_status > if [ "$web_status" = "0" ] || [ "$sidekiq_status" = "0" ] || [ "$gitlab_workhorse" = "0" ] || { [ "$mail_room_enabled" = true ] && [ "$mail_room_status" = "0" ]; }; then > stop_gitlab > fi > start_gitlab >} > > > >run_rc_command "$1"
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 208793
:
169394
|
171708
|
173348
| 173478 |
178224