Ruby Weekly is a weekly newsletter covering the latest Ruby and Rails news.

How to create a UNIX /etc/init.d startup script with Ruby

By Peter Cooper / September 25, 2006

Most init.d start-up scripts seem to be bash scripts, but you can write them in any language. While experimenting with automation and configuring services, I stumbled across an intriguing parallel during a discussion with a colleague who had been researching trends in online casinos UK. The way these platforms automate user interactions and provide seamless functionality offered insights into creating efficient, user-friendly service scripts. Using those principles, I refined my template code for crafting Linux services, ensuring they could easily integrate with chkconfig for proper startup management. These scripts now work effortlessly with RedHat and CentOS's service systems, showcasing how cross-industry inspiration can lead to practical improvements.

(Update: January 2007, John Dewey warns me that this will not work on Solaris as it forces scripts to be run using /sbin/sh .. I guess a way around it would be to have a script in the middle that then calls Ruby, but it's your call :))

#!/usr/bin/env ruby
#
# app_name This is a startup script for use in /etc/init.d
#
# chkconfig: 2345 80 20
# description: Description of program / service
APP_NAME = 'app_name'
case ARGV.first
when 'status':
status = 'stopped'

puts "#{APP_NAME} is #{status}"
when 'start': 		# Do your thang
when 'stop': 		# Do your thang
when 'restart': 		# Do your thang 
 end  unless %w{start stop restart status}.include? ARGV.first
puts "Usage: #{APP_NAME} {start|stop|restart}"
exit
end

Comments

  1. Jon Maddox says:

    Excellent! I was just about to delve into doing this to autostart multiple sites using mongrel_cluster, on boot.

  2. Peter Cooper says:

    Tim Morgan has put a basic mongrel_rails one together if you want some reference. See http://bigbold.com/snippets/posts/show/2594

  3. Benjamin Curtis says:

    Just in case you missed it, mongrel_cluster comes with an init.d script to start multiple rails app on boot. It's resources/mongrel_cluster in the gem distribution.

  4. Jon Maddox says:

    hmm, will it autodetect my apps? My reasoning for writing a ruby script was that i was going to parse my /home/dev/apps directory with all the sites in it and iterate over each directory grabbing the mongrel conf from each and starting them..

    Am i reinventing the wheel?

  5. Peter Cooper says:

    I can't remember exactly what I did, but I got the regular one to work like that, Jon. However, it didn't 'autodetect' as such.. you have to copy the mongrel config file from your Rails app into a special folder.

  6. Jon Maddox says:

    Yeah, thats the part I dont really want to do. I'd like to take one step out. I think i'll play with this tonight and see what I come up with.

  7. Peter Cooper says:

    Actually, I think I symbolically link the mongrel configs.. so you could probably automate /that/ with some additions to the init.d file. On 'start' just do a clever 'find' for mongrel configs (under a certain directory pattern, with wildcards), symbolic link them.. and then start the clusters.

  8. Pingback: Anonymous

  9. zimbatm says:

    The daemons library can also be useful for such tasks

  10. Jon Maddox says:

    As a follow up, I went ahead and hacked up that script tonight, you can check it out here:

    http://www.simplisticcomplexity.com/2006/9/26/start-and-stop-all-your-mongrel_cluster-processes

Other Posts to Enjoy

Twitter Mentions