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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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. # Load RVM into a shell session *as a function*
  20. if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
  21. # First try to load from a user install
  22. source "$HOME/.rvm/scripts/rvm"
  23. elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
  24. # Then try to load from a root install
  25. source "/usr/local/rvm/scripts/rvm"
  26. else
  27. printf "ERROR: An RVM installation was not found.\n"
  28. exit 1
  29. fi
  30. rvm use ruby-1.9.3-p286
  31. RUBY=$(which ruby)
  32. RAILS=$(which rails)
  33. BUNDLE=$(which rails)
  34. APP_PIDFILE=$DAEMON_HOME/tmp/pids/server.pid
  35. WS_PIDFILE=$DAEMON_HOME/tmp/pids/websocket.pid
  36. WORKER_PIDFILE=$DAEMON_HOME/tmp/pids/sessionworker.pid
  37. start() {
  38. cd $DAEMON_HOME
  39. # precompile assets
  40. if [ "$RAILS_ENV" = "production" ]; then
  41. echo -n $"Precompile assets for ${NAME}/${RAILS_ENV}"
  42. $BUNDLE exec rake assets:precompile && echo_success || echo_failure
  43. echo
  44. fi
  45. # start web server
  46. echo -n $"Starting ${NAME}/${RAILS_ENV} application server on port: ${APP_PORT}"
  47. $RAILS server -d -p $APP_PORT --pid $APP_PIDFILE &> /dev/null
  48. sleep 2
  49. status -p $APP_PIDFILE &> /dev/null && echo_success || echo_failure
  50. echo
  51. # start websocket server
  52. echo -n $"Starting ${NAME}/${RAILS_ENV} web socket server on port: ${WS_PORT}"
  53. nohup $RUBY script/websocket-server.rb -p $WS_PORT -i $WS_PIDFILE &> /dev/null &
  54. sleep 2
  55. status -p $WS_PIDFILE &> /dev/null && echo_success || echo_failure
  56. echo
  57. # start session worker
  58. echo -n $"Starting ${NAME}/${RAILS_ENV} session worker"
  59. nohup $RAILS runner 'Session.jobs' &> /dev/null &
  60. sleep 10
  61. status -p $WORKER_PIDFILE &> /dev/null && echo_success || echo_failure
  62. echo
  63. }
  64. stop() {
  65. # stop session worker
  66. echo -n $"Shutting down ${NAME}/${RAILS_ENV} session worker"
  67. if test -e $WORKER_PIDFILE; then
  68. killproc -p $WORKER_PIDFILE
  69. fi
  70. echo
  71. # stop websocket server
  72. echo -n $"Shutting down ${NAME}/${RAILS_ENV} web socket server on port: ${WS_PORT}"
  73. if test -e $WS_PIDFILE; then
  74. killproc -p $WS_PIDFILE
  75. fi
  76. echo
  77. # stop web server
  78. echo -n $"Shutting down ${NAME}/${RAILS_ENV} application server on port: ${APP_PORT}"
  79. if test -e $APP_PIDFILE; then
  80. killproc -p $APP_PIDFILE
  81. fi
  82. echo
  83. }
  84. case "$1" in
  85. start)
  86. start
  87. ;;
  88. stop)
  89. stop
  90. ;;
  91. restart)
  92. stop
  93. start
  94. ;;
  95. status)
  96. status -p $APP_PIDFILE "${NAME} ${RAILS_ENV} - application server"
  97. status -p $WS_PIDFILE "${NAME} ${RAILS_ENV} - web socket server"
  98. status -p $WORKER_PIDFILE "${NAME} ${RAILS_ENV} - session worker"
  99. ;;
  100. *)
  101. echo "Usage: $SCRIPTNAME {start|stop|restart|status}" >&2
  102. exit 3
  103. ;;
  104. esac