Strona 1 z 1

[+] crontab i własny skrypt nie działa

: 03 kwietnia 2009, 16:58
autor: deathek
Witam. Napisałem swój własny skrypt do robienia kopii paru ważnych dla mnie danych. Wygląda to tak:

Kod: Zaznacz cały

#!/bin/bash
DATA=`date +%Y.%m.%d-%H:%M:%S`
zip -9 -r /home/goqsane/vf/backup-$DATA.zip /home/goqsane/vf/data 2> backup.txt
ncftpput -u ... -p ... ... . /home/goqsane/vf/backup-$DATA.zip 2> backup.txt
echo backup-$DATA >> /home/goqsane/vf/backup.txt
rm /home/goqsane/vf/backup-$DATA.zip 2> backup.txt
Następnie zapisałem go sobie w pewnym katalogu i nadałem mu prawa do uruchamiania. Zrobiłem wpis do crontaba:

Kod: Zaznacz cały

* */4 * * * /home/goqsane/vf/backup
Gdzie ,,backup'' to nazwa powyższego skryptu. I teraz dzieją się ciekawe rzeczy. Jeżeli uruchomię skrypt z palca

Kod: Zaznacz cały

./backup
(katalog roboczy nie ma znaczenia), skrypt działa. Uruchamiany z crona, wygląda, jakby wykonywał jedynie "echo", bo mam wpis w pliku backup.txt, ale nic poza tym. Ktoś może wie, co się z tym dzieje? Sprawdzałem w mailu, ale nic nie wyczytałem:

Kod: Zaznacz cały

Date: Mon, 30 Mar 2009 12:01:01 +0200 (CEST)
Message-Id: <200903301001.n2UA11eS054265@x>
From: goqsane (Cron Daemon)
To: goqsane
Subject: Cron <goqsane@x> /home/goqsane/vf/backup
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/goqsane>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=goqsane>
X-Cron-Env: <USER=goqsane>
Dodam, że na tym serwerze na którym to edytowałem, nie posiadam konta roota, edytowałem jako użytkownik przez:

Kod: Zaznacz cały

crontab -e

: 03 kwietnia 2009, 19:27
autor: lessmian2
Podaj wszędzie całą ścieżkę do pliku backup.txt oraz zmień przekierowanie do pliku z ">" na ">>" tak jak jest to w przedostatniej linii Twojego skryptu. Sprawdź ponownie co się zapisuje do logu po odpaleniu przez crona.

: 03 kwietnia 2009, 20:40
autor: deathek
Dałem radę w końcu coś ustalić. Przekierowałem stdin i stderr do pliku osobno dla każdego polecenia ze skryptu i otrzymałem coś takiego:

Kod: Zaznacz cały

/home/goqsane/vf/backup: line 3: zip: command not found
/home/goqsane/vf/backup: line 4: ncftpput: command not found
rm: /home/goqsane/vf/backup-2009.04.03-20:39:01.zip: No such file or directory
Co mnie dziwi, bo z palca skrypt działa w 100%.

Edycja:
Dostałem w końcu konkretną odpowiedź. Chodziło o to, że crontab może mieć inne zmienne środowiskowe, na co za dużo nie poradzimy nie mając roota, natomiast jest polecenie

Kod: Zaznacz cały

which
które wraz z nazwą programu jako parametrem wyszukuje prawdziwą ścieżkę i wykonuje polecenie. Ma też opcję -a, która zwraca po prostu prawdziwą ścieżkę do danego programu, także można spokojnie w crontabie dodać całą ścieżkę i wszystko pięknie działa.

: 04 kwietnia 2009, 13:52
autor: lessmian2
No właśnie tak podejrzewałem że będzie lepiej jak podasz pełne ścieżki. Ale jak już sam do tego doszedłeś to gratuluję :-)