Duplicating service runlevel configurations from one server to another.

chkconfig --list | fgrep :on | sed -e 's/\(^.*\)*0:off/\1:/g' -e 's/\(.\):on/\1/g' -e 's/.:off//g' | tr -d [:blank:] | awk -F: '{print$2,$1}' | ssh host 'cat > foo'
And then to complete the task: Go to target host; ssh host Turn everything off: for i in `chkconfig --list | fgrep :on | awk '{print $1}'` ; do chkconfig --level 12345 $i off; done Create duplicate config: while read line; do chkconfig --level $line on; done < foo

2009-05-13 21:17:39

What Others Think

I tried to include the one line version of this in the initial post but it kept being removed, so here it is: chkconfig --list | fgrep :on | sed -e 's/\(^.*\)*0:off/\1:/g' -e 's/\(.\):on/\1/g' -e 's/.:off//g' | tr -d [:blank:] | awk -F: '{print$2,$1}' | ssh host 'cat > foo; for i in `chkconfig --list | fgrep :on | cut -f1` ; do chkconfig --level 12345 $i off; done; while read line; do chkconfig --level $line on; done < foo'
catawampus · 638 weeks and 1 day ago
Argh! OK, so it's clever, but *WAY* too complicated. Runlevels are controlled by symbolic links in the /etc/rc[0-6].d directories. To copy the configuration to another machine you just have to reproduce these links. The smartest way to do this, is to use rsync: rsync -av --delete /etc/rc* remote_host:etc/ -a = archive -v = verbose --delete = remove unwanted files at the destination
flatcap · 638 weeks and 1 day ago
Sorry, slight typo (missing a leading /) rsync -av --delete /etc/rc* remote_host:/etc/
flatcap · 638 weeks and 1 day ago
I like the rsync but would be concerned about deleting the original initscripts in /etc/rc.d/init.d/ that remain in place when the service is disabled with chkconfig.
catawampus · 638 weeks and 1 day ago
So something like the following would do what I want (thank you!): rsync -av --delete /etc/rc.d/rc[0-6].d host:/etc/
catawampus · 638 weeks and 1 day ago
I do believe there is a potential problem with using rsync. It assumes you know the root password and in many environments you may not. My initial suggestion is easily handled using sudo but you may also be able to use sudo with rsync. It depends on the server configurations and whether it uses sudo timeout's across successive ssh logins. Then the following might work for you: "Prime" sudo without echoing your password to the screen: stty -echo; ssh host 'sudo -v'; stty echo Run the rsync using sudo without the need for psuedo terminal: sudo rsync -av --delete --rsync-path='sudo rsync' -e ssh /etc/rc.d/rc[0-6].d user@host:/etc/
catawampus · 638 weeks ago
Doh! I stole that stty -echo line from some site while researching issues with rsync, sudo and psuedo terminals but should have replaced it with: ssh -t 'sudo -v'
catawampus · 638 weeks ago

What do you think?

Any thoughts on this command? Does it work on your machine? Can you do the same thing with only 14 characters?

You must be signed in to comment.

What's this?

commandlinefu.com is the place to record those command-line gems that you return to again and again. That way others can gain from your CLI wisdom and you from theirs too. All commands can be commented on, discussed and voted up or down.

Share Your Commands

Stay in the loop…

Follow the Tweets.

Every new command is wrapped in a tweet and posted to Twitter. Following the stream is a great way of staying abreast of the latest commands. For the more discerning, there are Twitter accounts for commands that get a minimum of 3 and 10 votes - that way only the great commands get tweeted.

» http://twitter.com/commandlinefu
» http://twitter.com/commandlinefu3
» http://twitter.com/commandlinefu10

Subscribe to the feeds.

Use your favourite RSS aggregator to stay in touch with the latest commands. There are feeds mirroring the 3 Twitter streams as well as for virtually every other subset (users, tags, functions,…):

Subscribe to the feed for: