Jason Todd Slack-Moehrle wrote:
Hi All,
I need to write a script that I will manually start (or a cron job in future) but I need it to do a number of things in order one after another. How do i do that so everything gets dont as the steps depend on each other.
A few commands can be stuck together in the cron command. Separating them with ';'' makes them execute sequentially regardless of status; separating with '&&' will continue only if the previous command succeeds. For more than a few, put the commands in a script file
Example:
cd /system_backups/
tar cvf apache-conf.tar /etc/httpd/conf/* gzip -v9 apache-conf.tar
I'd: cd /etc/httpd/conf && tar -czvf /system_backups/apache-conf.tar.gz instead.
tar cvf apache-data.tar /var/www/* gzip -v9 apache-data.tar
then last step... tar cvf <current_date>-system_backup.tar <all> the gzip files above gzip -v9 <current_date>-system_backup.tar
scp <current_date>-system_backup.tar.gz user@10.0.0.1:/. etc...etc....
My questions:
- How do I execute each statement and make sure subsequent statements
are not executed until the previous is done?
Commands in a script execute sequentially unless you explicitly use an & to put them in the background.
- How do I error check so if a step fails the script stops?
Each command will return a status in the $? variable that you can check. The shell philosophy is that there are lots of ways to fail but usually only one way to succeed, so the value 0 represents success, anything else is failure. You can use the 'test' operator (usually written as [, but read the test man page to see what it does), or just: command1 && command2 (runs command2 only if command1 succeeds) command1 || command2 (runs command2 only if command1 fails - you can exit this way)
- Since I run an SMTP Server on this box can I e-mail myself from
bash the nightly results?
Yes, cron will automatically mail any output to the user that owns the cron job. Just add an alias for this local user (probably root) to make it go where you want.
- when I want to run the scp to send over the file to another machine
for safety, how can I have it know the password to the machine I am scp'ing to?
Use ssh keys instead.
My mind is going crazy sort of with the things that I could do to protect myself in case of a system failure and making restoring easier.
Can anyone provide insight for me?
You'd probably be better off running something like backuppc (http://backuppc.sourceforge.net/) instead of rolling your own. And you might want some kind of version control system like subversion for your content and most important configuration files.
-- Les Mikesell lesmikesell@gmail.com