I’m very new to Perl and I hope someone can help me out with a problem with a script I’m trying to get running. I’m pulling my hair out.
I’m running SLES 10 SP2 and would like to backup a directory mounted at /data on the server to an External 160Gb Seagate hard drive mounted at /media/disk. The directory I want to archve is /data/web2insight, but when the script runs I get an error telling me that web2insight is a directory. The error is occuring at the pipe to gzip line.
I’d like to grab all the subdirectories and files located within that directory and create a compressed file that is stored on the external drive. This script will run daily as a cronjob.
I’d really appreciate any help or pointers as to where I’m going wrong.
Many thanks in advance.
Paul
Here is the script so far.
#!/bin/bash
BACKUPDIR=/media/disk/srvbu/
KEEPDAYS=31
FILENAME=$BACKUPDIR/web2i.backup.$(date +%Y%m%d)
# Make sure that the directory exists
mkdir -p $BACKUPDIR
# Create a new backup (and compress it)
echo starting
/data/web2insight/ | gzip --best >${FILENAME}.new.gz mv -f ${FILENAME}.new.gz ${FILENAME}.gz
echo finished
sleep 5
# Delete old copies
OLD=$(find $BACKUPDIR/ -ctime +$KEEPDAYS -and -name 'web2i.backup.*') -n "$OLD" ] && rm -f $OLD
You talk about being very new to Perl. That may be correct, but I do not see any connection to your problem. You have a bash script which does not have the word perl anywhere .
Now you have the following line in your bash script:
This line starts with what you yourself identify as a directory name. It should start with a command of course!
There are more strange things in this line: there seem to be two commands there. I think the mv … should start on a new line or be seperated from what comes before it by a ; .Shouldn’t it be something like:
tar c /data/web2insight/ | gzip --best >${FILENAME}.new.gz
mv -f ${FILENAME}.new.gz ${FILENAME}.gz
When the script from mr. Petersen works, you might have a better look at it.
The main problem is that you are simply trying to “run” a directory,
which is impossible. For example try to type ‘/data/web2insight/’ on
the command line like you are trying to do in the script and you’ll get
the same error.
gzip is a great stream editor but .gz files are not like .zip files in
that they do not lump files together in one archive. That is what ‘tar’
is for. So… with a quick look at the ‘tar’ manpage (man tar):
tar -cO /path/to/whatever #create an archive and send it to STDOUT.
So modify the line with /data/web2insight up above to look like the
following and try it out:
Also note that those should be separate lines as shown above, or else
they should be joined with an ‘&&’ so if the first fails the second
doesn’t do anything.
Good luck.
palford wrote:
| I must point out that credit for the script goes to Mike Petersen as
| this is a re-hash of his ldap backup script.
|
|
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
hro1 wrote:
| You can tar and compress in one go. See ‘info tar’ section: Option
| Summary
| tar --create --gzip --file=/media/disk/filename_of_your_choice.tar.gz
| /data
|
|
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
Don’t run it with Perl. It’s all but guaranteed to fail if you do.
Just make the file executable and run it as ./backupscript.sh or
/path/to/backupscript.sh and you’ll be fine as the first line is the
“shebang” line indicating it should be run with /bin/bash
Good luck.
palford wrote:
| Thank you all. I have now got it working.
|
| Sorry for the confusion regarding Perl. I run the script with the
| command:
|
| perl backupscript.sh
|
| That was what I was told to do, so assumed it was Perl. I am VERY knew
| to all of this. God, what a steep, though enjoyable learning curve.
|
| Thanks all once again.
| Paul
|
|
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
Browse to it in Nautilus/whatever (the equivalent of windows explorer)
and then right-click on the file, go to Properties, Permissions, click
‘Execute’ in the ‘Onwer’ row, and then Close. The file should now be
executable.
Good luck.
hcvv wrote:
| ab@novell.com, I do not think he will understand what ‘make it
| executable’ means. You should explain more I am afraid.
|
| palford, standing in the directory where backupscript.sh is do
|
Code:
chmod u+x backupscript.sh
--------------------
This will set the x (executable) bit for the owner. This can be seen
when you do
Code:
--------------------
ls -l backupscript.sh
--------------------
Now you execute it by
Code:
--------------------
./backupscript.sh
--------------------
Btw there is no need to have the .sh at the end of the filename except
when it is to your personal liking.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org