init-script-normal-user-rvm-fedora 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #!/bin/bash
  2. #
  3. # init script build as PoC for
  4. # 1) normal user (non root)
  5. # 2) rvm support
  6. # 3) pid files in user space
  7. # 4) fedora os
  8. # source function library
  9. . /etc/rc.d/init.d/functions
  10. # Get network config
  11. . /etc/sysconfig/network
  12. [ "${NETWORKING}" = "no" ] && exit 0
  13. DAEMON_HOME=/home/kraftvoll/zammad/
  14. #RAILS_ENV=production
  15. RAILS_ENV=test
  16. NAME=zammad
  17. APP_PORT=3000
  18. WS_PORT=6042
  19. ZAMMAD_CONFIG=/etc/sysconfig/zammad
  20. # Read config
  21. [ -f "$JENKINS_CONFIG" ] && . "$JENKINS_CONFIG"
  22. # Load RVM into a shell session *as a function*
  23. if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
  24. # First try to load from a user install
  25. source "$HOME/.rvm/scripts/rvm"
  26. elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
  27. # Then try to load from a root install
  28. source "/usr/local/rvm/scripts/rvm"
  29. else
  30. printf "ERROR: An RVM installation was not found.\n"
  31. exit 1
  32. fi
  33. rvm use ruby-1.9.3-p286
  34. RUBY=$(which ruby)
  35. RAILS=$(which rails)
  36. BUNDLE=$(which rails)
  37. APP_PIDFILE=$DAEMON_HOME/tmp/pids/server.pid
  38. WS_PIDFILE=$DAEMON_HOME/tmp/pids/websocket.pid
  39. WORKER_PIDFILE=$DAEMON_HOME/tmp/pids/sessionworker.pid
  40. start() {
  41. cd $DAEMON_HOME
  42. # precompile assets
  43. if [ "$RAILS_ENV" = "production" ]; then
  44. echo -n $"Precompile assets for ${NAME}/${RAILS_ENV}"
  45. $BUNDLE exec rake assets:precompile && echo_success || echo_failure
  46. echo
  47. fi
  48. # start web server
  49. echo -n $"Starting ${NAME}/${RAILS_ENV} application server on port: ${APP_PORT}"
  50. $RAILS server -d -p $APP_PORT --pid $APP_PIDFILE &> /dev/null
  51. sleep 2
  52. status -p $APP_PIDFILE &> /dev/null && echo_success || echo_failure
  53. echo
  54. # start websocket server
  55. echo -n $"Starting ${NAME}/${RAILS_ENV} web socket server on port: ${WS_PORT}"
  56. nohup $RUBY script/websocket-server.rb -p $WS_PORT -i $WS_PIDFILE &> /dev/null &
  57. sleep 2
  58. status -p $WS_PIDFILE &> /dev/null && echo_success || echo_failure
  59. echo
  60. # start session worker
  61. echo -n $"Starting ${NAME}/${RAILS_ENV} session worker"
  62. nohup $RAILS runner 'Session.jobs' &> /dev/null &
  63. sleep 10
  64. status -p $WORKER_PIDFILE &> /dev/null && echo_success || echo_failure
  65. echo
  66. }
  67. stop() {
  68. # stop session worker
  69. echo -n $"Shutting down ${NAME}/${RAILS_ENV} session worker"
  70. if test -e $WORKER_PIDFILE; then
  71. killproc -p $WORKER_PIDFILE
  72. fi
  73. echo
  74. # stop websocket server
  75. echo -n $"Shutting down ${NAME}/${RAILS_ENV} web socket server on port: ${WS_PORT}"
  76. if test -e $WS_PIDFILE; then
  77. killproc -p $WS_PIDFILE
  78. fi
  79. echo
  80. # stop web server
  81. echo -n $"Shutting down ${NAME}/${RAILS_ENV} application server on port: ${APP_PORT}"
  82. if test -e $APP_PIDFILE; then
  83. killproc -p $APP_PIDFILE
  84. fi
  85. echo
  86. }
  87. case "$1" in
  88. start)
  89. start
  90. ;;
  91. stop)
  92. stop
  93. ;;
  94. restart)
  95. stop
  96. start
  97. ;;
  98. status)
  99. status -p $APP_PIDFILE "${NAME} ${RAILS_ENV} - application server"
  100. status -p $WS_PIDFILE "${NAME} ${RAILS_ENV} - web socket server"
  101. status -p $WORKER_PIDFILE "${NAME} ${RAILS_ENV} - session worker"
  102. ;;
  103. *)
  104. echo "Usage: $SCRIPTNAME {start|stop|restart|status}" >&2
  105. exit 3
  106. ;;
  107. esac