cronjob not running

Giorgos Keramidas keramida at ceid.upatras.gr
Fri Apr 27 14:35:02 EEST 2007


On 2007-04-27 12:39, Harris Kosmidhs <hkosmidi at softnet.tuc.gr> wrote:
> Se ena palio PC ekana anaba8mish to ubuntu se 7.04.
>
> 8elo na balo ena cronjob pou na kanei backup kapoia data.
> Ekana to backupsvn:
>
> #!/bin/sh
>
> echo "Backing up in /net/backup" > /tmp/rdiff.svn
> rdiff-backup --print-statistics /net/svn/ /net/backup/svn >>  /tmp/rdiff.svn
> cat /tmp/rdiff.svn|mail -s "Rdiff backup -- GATEWAY" blah at blah.gr
>
> To bazo sto /etc/cron.daily kai to kano chmod +x
>
> An to tre3o os root trexei mia xara kai mou erxetai mail.
>
> Alla diaforetika to cron den to trexei ka8olou kai de mou erxetai mail.
>
> Xreiazetai na kano kati allo pera tou na balo to script sto cron.daily?

Ναι...

  - Χρειάζεται να φτιάξεις το script να είναι πιο 'πολυλογάδικο' για να
    ξέρεις τι κάνει κάθε στιγμή.

  - Δεν είναι καλή ιδέα να χρησιμοποιείς hardcoded το tmpfile name (έτσι
    το script σου είναι vulnerable σε symlink attacks).

  - Δεν έχει καλό στυλ γιατί επαναλαμβάνονται πολλές φορές τα ίδια
    πράγματα σε πολλά σημεία (π.χ. το filename `/tmp/rdiff.svn').

  - Προσοχή, επίσης, στο default PATH.  Μπορεί το rdiff-backup να μην
    είναι στο default PATH με το οποίο τρέχουν τα cron jobs.

Ενα σχετικά πιο 'fault-tolerant' script είναι το παρακάτω:

| #!/bin/sh
|
| umask 022
| PATH='/bin:/sbin:/usr/bin:/usr/sbin'
|
| # Record the start date of the script for email subject lines
| startdate=`date -u '+%Y-%m-%d %H:%M:%S'`
|
| # The email addresses which will be notified with script logs/results
| notifylist="blah at blah.gr"
|
| # Srcpath is the source path of the backup files
| srcpath='/net/svn'
|
| # Dstpath is the destination path of the backup copies
| dstpath='/net/backup/svn'
|
| log()
| {
|         __timestamp="`date -u '+%Y-%m-%d %H:%M:%S'`"
|         echo "${__timestamp} -- $*" 2>&1
| }
|
| msg()
| {
|         log "INFO: $*"
|         return 0
| }
|
| err()
| {
|         errcode=$1
|         shift
|         log >&2 "ERROR: $*"
|         exit $errcode
| }
|
| cleanup()
| {
|         if [ -n "$tmpfile" ]; then
|                 if [ -f "$tmpfile" ] && [ -n "$notifylist" ]; then
|                         mail -s "rdiff backup at $startdate" \
|                                 "$notifylist" < "$tmpfile"
|                         [ $? -ne 0 ] && cat "$tmpfile"
|                 fi
|                 /bin/rm -f "$tmpfile"
|         fi
|         return 0
| }
|
| die()
| {
|       log "Killed by signal."
|       cleanup ; exit 1
| }
|
| trap "cleanup ; exit 0" 0
| trap "die" 1 2 15
|
| tmpfile=`mktemp "/tmp/rdiff.svn.$$"`
| if [ $? -ne 0 ]; then
|         err 1 "cannot create temporary log file"
| fi
|
| # Redirect stdout and stderr to $tmpfile
| exec > "${tmpfile}"
| exec 2>> "${tmpfile}"
|
| if [ ! -d "$srcpath" ]; then
|         err 1 "srcpath not found at \`$srcpath'"
| fi
| if [ ! -d "$dstpath" ]; then
|         err 1 "dstpath not found at \`$dstpath'"
| fi
|
| msg "backing up \`$srcpath' to \`$dstpath'"
| rdiff-backup --print-statistics "$srcpath"/. "$dstpath"/.




More information about the Linux-greek-users mailing list