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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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 "$ZAMMAD_CONFIG" ] && . "$ZAMMAD_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
  34. RUBY=$(which ruby)
  35. RAILS=$(which rails)
  36. BUNDLE=$(which bundle)
  37. APP_PIDFILE=$DAEMON_HOME/tmp/pids/thin.pid
  38. WS_PIDFILE=$DAEMON_HOME/tmp/pids/websocket.pid
  39. SCHEDULER_PIDFILE=$DAEMON_HOME/tmp/pids/scheduler_runner.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 &> /dev/null && 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. thin start --threaded -d -p $APP_PORT --pid $APP_PIDFILE
  52. sleep 2
  53. status -p $APP_PIDFILE &> /dev/null && echo_success || echo_failure
  54. echo
  55. # start websocket server
  56. echo -n $"Starting ${NAME}/${RAILS_ENV} web socket server on port: ${WS_PORT}"
  57. script/websocket-server.rb start -d -p $WS_PORT -i $WS_PIDFILE &> /dev/null &
  58. sleep 2
  59. status -p $WS_PIDFILE &> /dev/null && echo_success || echo_failure
  60. echo
  61. # start scheduler worker
  62. echo -n $"Starting ${NAME}/${RAILS_ENV} scheduler worker"
  63. script/scheduler.rb start
  64. sleep 10
  65. status -p $SCHEDULER_PIDFILE &> /dev/null && echo_success || echo_failure
  66. echo
  67. }
  68. stop() {
  69. # stop scheduler worker
  70. echo -n $"Shutting down ${NAME}/${RAILS_ENV} scheduler worker"
  71. if test -e $SCHEDULER_PIDFILE; then
  72. killproc -p $SCHEDULER_PIDFILE
  73. fi
  74. echo
  75. # stop websocket server
  76. echo -n $"Shutting down ${NAME}/${RAILS_ENV} web socket server on port: ${WS_PORT}"
  77. if test -e $WS_PIDFILE; then
  78. killproc -p $WS_PIDFILE
  79. fi
  80. echo
  81. # stop web server
  82. echo -n $"Shutting down ${NAME}/${RAILS_ENV} application server on port: ${APP_PORT}"
  83. if test -e $APP_PIDFILE; then
  84. killproc -p $APP_PIDFILE
  85. fi
  86. echo
  87. }
  88. case "$1" in
  89. start)
  90. start
  91. ;;
  92. stop)
  93. stop
  94. ;;
  95. restart)
  96. stop
  97. start
  98. ;;
  99. status)
  100. status -p $APP_PIDFILE "${NAME} ${RAILS_ENV} - application server"
  101. status -p $WS_PIDFILE "${NAME} ${RAILS_ENV} - web socket server"
  102. status -p $SCHEDULER_PIDFILE "${NAME} ${RAILS_ENV} - scheduler worker"
  103. ;;
  104. *)
  105. echo "Usage: $SCRIPTNAME {start|stop|restart|status}" >&2
  106. exit 3
  107. ;;
  108. esac