2013-01-03 15 views
8

mam start.sh skrypt bash, która działa mimo CRON PRACY na serwerze ubuntucron nie emituje do donohup.out

start.sh zawiera wymienione poniżej linii kodu

ścieżka start.sh jest /home/ubuntu/folder1/folder2/start.sh

#!/bin/bash 

crawlers(){ 
    nohup scrapy crawl first & 
    nohup scrapy crawl 2nd & 
    wait $! 
    nohup scrapy crawl 3rd & 
    nohup scrapy crawl 4th & 
    wait 
} 

cd /home/ubuntu/folder1/folder2/ 
PATH=$PATH:/usr/local/bin 
export PATH 

python init.py & 
wait $! 
crawlers 
python final.py 

moi znaczy Sue jest jeśli biegnę start.sh moich siebie na linii poleceń wyprowadza w donohup.out plik

ale gdy wykonuje ten plik bash przez cronjob (choć skrypty są uruchomione w porządku) jej nie produkcji donohup.out

jak mogę dostać wyjście tego cron w donohup.out?

+1

jak/gdzie tworzysz ten plik nohup.out? pamiętaj, że domyślny katalog roboczy cron jest katalogiem głównym ID użytkownika, w którym są uruchamiane. jeśli używasz względnych ścieżek dla tego pliku, będziesz względny względem katalogu domowego konta, a nie twojego własnego katalogu bieżącego powłoki –

+0

@MarcB Jestem noob na Linuksie. każda linia dołącza dane wyjściowe w Nohup np. Nohup scrapy crawl 3rd & Dodałem to w crontab 40 10 * * * /home/ubuntu/folder1/folder2/start.sh –

+1

FYI: konstrukcja 'python init.py & wait $!' (rozłożona na dwie linie) jest bezcelowe; upuść '&' i usuń 'wait'. To nie jest czynnik twojego problemu; działa również w formie pisemnej. Ale to nie ma sensu. –

Odpowiedz

14

Dlaczego używasz nohup? nohup to polecenie nakazujące uruchomionemu terminalowi zignorowanie sygnału zawieszenia. cron nie ma jednak sygnału zawieszenia, ponieważ nie jest połączony z sesją terminalową.

W tym przypadku zamiast:

nohup scrapy crawl first & 

Prawdopodobnie chcesz:

scrapy crawl first > first.txt & 

Ostatni przykład działa również w terminalu, ale po zamknięciu terminalu, sygnał rozłączenia (hup) jest wysyłany, co kończy program.