The people behind sidekiq thankfully provide a nice init script, although my particular setup caused a few problems for it.
- The script should run as root, however I use a 'deployer' user, under which runs rbenv. Root had no access to
bundle exec
- Since I don't write init scripts often, it took me a while to get it to start after Redis
My workaround to the rbenv problem was to modify the providied Sidekiq init script, to run the actual bundle exec sidekiq
command as my deployment user:
START_CMD="$BUNDLE exec $SIDEKIQ -e $APP_ENV -P $PID_FILE" CMD="cd ${APP_DIR}; ${START_CMD}" # Replaced this: $START_CMD >> $LOG_FILE 2>&1 & # With this: su -c "$CMD" - $AS_USER
I created the file /etc/init.d/sidekiq
with the contents of the sidekiq init script, and my code above. This didn't work. Examining the log file, sidekiq was being started before redis could finish initializing. To stop this happening I needed to run:
sudo update-rc.d sidekiq defaults 99
This sets the index of the sidekiq script to be 99. For me Redis was initing at 20, since 99 is greater than 20, Sidekiq will start after.
You can now manage the sidekiq process with the usual:
service sidekiq start service sidekiq status service sidekiq stop
Full modified init script below. I have only tried it on Ubuntu 12.10 although it should also work on other Ubuntus and probably Debian.
<script src="https://gist.github.com/dyerc/5326706.js"></script>