Crontab does not run script?

Discussion in 'Programming/Scripts' started by fweijers, Aug 28, 2011.

  1. fweijers

    fweijers New Member

    Hi
    I have got 2 NAS devices and I want to set up a nightly rsync backup from NAS1 to NAS2.

    On NAS1 I have the rsync script working fine if I start it from command line.
    (> /ffp/bin/snapshotMYBOOKWORLD.sh)​
    No problems with ssh password etc.

    However, if I run the script via a crontab entry, I get rsync errors.
    What causes the script to fail?:confused:

    This is the rsync error I get
    20110828_040508
    rsync: Failed to exec ssh: No such file or directory (2)
    rsync error: error in IPC code (code 14) at pipe.c(84) [sender=3.0.5]
    rsync: writefd_unbuffered failed to write 4 bytes [sender]: Broken pipe (32)
    rsync error: error in IPC code (code 14) at io.c(1509) [sender=3.0.5]
    20110828_040509
    This is my crontab:
    root@DLINK:~# crontab -l
    32 2 * * * /usr/sbin/rtc -s
    30 2 2 * * /usr/sbin/rtc -c
    59 1 * * * /usr/sbin/daylight &
    5 2 * * * /ffp/bin/snapshot.sh
    5 2 * * * /ffp/bin/snapshot.sh
    5 4 * * * /ffp/bin/snapshotMYBOOKWORLD.sh
    root@DLINK:~#
    This is the backupscript
    root@DLINK:~# ls -l /ffp/bin/snapshotMYBOOKWORLD.sh
    -rwxrwxrwx 1 root root 806 Aug 21 11:56 /ffp/bin/snapshotMYBOOKWORLD.sh
    Hope someone can help me!:)
    Regards
    Frank
     
  2. falko

    falko Super Moderator Howtoforge Staff

    Do you use full paths in your script?
     
  3. fweijers

    fweijers New Member

    Not sure I use full paths ...

    The funny thing is that the script runs fine when started from command line, but not when started via Crontab.

    This is the backupscript:

    # Set Source Path
    # Back up the A drive (HD_a2) by identifying the source path as /mnt/HD_a2
    # Back up multiple directories by surrounding a list with single quotes (i.e., s
    # srcpath='/mnt/HD_a2/VIDEO /mnt/HD_a2/DOCUMENTEN /mnt/HD_a2/FOTOS /mnt/HD_a2/CO
    srcpath='/mnt/HD_a2/DOCUMENTEN /mnt/HD_a2/VIDEO /mnt/HD_a2/FOTOS'

    # Set the Destination Path
    [email protected]:/shares/internal/BACKUPNAS

    ffppath=/ffp

    datum=`date "+%Y%m%d_%H%M%S"`
    echo $datum >> $ffppath/log/snapshotMYBOOKWORLD.log 2>&1

    $ffppath/bin/rsync -av $srcpath $dstpath >> $ffppath/log/snapshotMYBOOKWORLD.log

    datum=`date "+%Y%m%d_%H%M%S"`
    echo $datum >> $ffppath/log/snapshotMYBOOKWORLD.log 2>&1
     
  4. falko

    falko Super Moderator Howtoforge Staff

    You could use the full path for the date command (for example /bin/date). You can find that out by running
    Code:
    which date
    Do the same for the echo command.
     
  5. fweijers

    fweijers New Member

    Got it solved!

    The cause was indeed the paths.
    I changed the rsync command into this and it works like a charm.

    $ffppath/bin/rsync -av -e /ffp/bin/ssh $srcpath $dstpath >> $ffppath/log/snapshotMYBOOKWORLD.log 2>&1

    Thanks for the hint!:D
     
  6. fweijers

    fweijers New Member

    By the way, one less important thing i cant explain....

    The crontab - l shows this:

    root@DLINK:~# crontab -l
    32 2 * * * /usr/sbin/rtc -s
    30 2 2 * * /usr/sbin/rtc -c
    59 1 * * * /usr/sbin/daylight &
    5 2 * * * /ffp/bin/snapshot.sh
    5 2 * * * /ffp/bin/snapshot.sh
    5 4 * * * /ffp/bin/snapshotMYBOOKWORLD.sh

    As you can see /ffp/bin/snapshot.sh is started twice ... how can this be?

    Crontab is configured using this script:
    #!/bin/sh

    CRONTXT=/mnt/HD_a2/crontab.txt

    # start with existing crontab
    /bin/crontab -l > $CRONTXT

    # add the Rsync job to execute at 2:00 am
    /bin/echo "5 2 * * * /ffp/bin/snapshot.sh" >> $CRONTXT
    /bin/echo "5 4 * * * /ffp/bin/snapshotMYBOOKWORLD.sh" >> $CRONTXT

    # install the new crontab
    /bin/crontab $CRONTXT

    # clean up
    /bin/rm $CRONTXT

     
  7. falko

    falko Super Moderator Howtoforge Staff

    Maybe the script was run twice. You can remove one of the two cronjobs by running
    Code:
    crontab -e
     
  8. fweijers

    fweijers New Member

    Thanks,

    crontab -e gives a kind of vi script which allows to delete one of the entries.

    Done deal! ;)

    So I've got an rsync backup solution up and runnning to a seperate device, which keeps my data super safe.:cool:
     

Share This Page