[+] crontab i w

Konfiguracja serwerów, usług, itp.
deathek
Posty: 3
Rejestracja: 15 października 2008, 00:12

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

Post 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
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post 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.
deathek
Posty: 3
Rejestracja: 15 października 2008, 00:12

Post 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.
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post 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ę :-)
ODPOWIEDZ