Crontab за стартиране на bash скрипт, който изпълнява множество python скриптове

Аз съм начинаещ в linux. Искам да изпълнявам множество скриптове на Python на всеки 30 секунди и планирам да направя това с помощта на скрипт bash (за стартиране на множество скриптове на Python едновременно) и crontab (за планиране на изпълнението на скриптовете на всеки 30 секунди).

Ето как моят bash скрипт:

#!/bin/bash
# This script is used to run multiple python script to query all types and all modes of GTFSR data

#Set working directory
cd "${0%/*}"

#BUS Query Real Time
python gtfsrdb_tfnsw.py -p 'https://api.transport.nsw.gov.au/v1/gtfs/vehiclepos/buses' --database="postgresql://localhost/test" —apikey="XXX" -m "buses" -c -1 &
python gtfsrdb_tfnsw.py -t 'https://api.transport.nsw.gov.au/v1/gtfs/realtime/buses' --database="postgresql://localhost/test" --apikey="XXX" -m "buses" -c -1 &
python gtfsrdb_tfnsw.py -a 'https://api.transport.nsw.gov.au/v1/gtfs/alerts/buses' --database="postgresql://localhost/test" --apikey="XXX" -m "buses" -c -1 &

#Sydney Train Real Time
python gtfsrdb_tfnsw.py -p 'https://api.transport.nsw.gov.au/v1/gtfs/vehiclepos/sydneytrains' --database="postgresql://localhost/test" --apikey="XXX" -m "sydneytrains" -c -1 &
python gtfsrdb_tfnsw.py -t 'https://api.transport.nsw.gov.au/v1/gtfs/realtime/sydneytrains' --database="postgresql://localhost/test" --apikey="XXX" -m "sydneytrains" -c -1 &
python gtfsrdb_tfnsw.py -a 'https://api.transport.nsw.gov.au/v1/gtfs/alerts/sydneytrains' --database="postgresql://localhost/test" --apikey="XXX" -m "sydneytrains" -c -1 &

#Ferries Real Time
python gtfsrdb_tfnsw.py -p 'https://api.transport.nsw.gov.au/v1/gtfs/vehiclepos/ferries' --database="postgresql://localhost/test" --apikey="XXX" -m "ferries" -c -1 &
python gtfsrdb_tfnsw.py -t 'https://api.transport.nsw.gov.au/v1/gtfs/realtime/ferries' --database="postgresql://localhost/test" --apikey="XXX" -m "ferries" -c -1 &
python gtfsrdb_tfnsw.py -a 'https://api.transport.nsw.gov.au/v1/gtfs/alerts/ferries' --database="postgresql://localhost/test" --apikey="XXX" -m "ferries" -c -1 &

#lightrail Real Time
python gtfsrdb_tfnsw.py -p 'https://api.transport.nsw.gov.au/v1/gtfs/vehiclepos/lightrail' --database="postgresql://localhost/test" --apikey="XXX" -m "lightrail" -c -1 &
python gtfsrdb_tfnsw.py -t 'https://api.transport.nsw.gov.au/v1/gtfs/realtime/lightrail' --database="postgresql://localhost/test" --apikey="XXX" -m "lightrail" -c -1 &
python gtfsrdb_tfnsw.py -a 'https://api.transport.nsw.gov.au/v1/gtfs/alerts/lightrail' --database="postgresql://localhost/test" --apikey="XXX" -m "lightrail" -c -1 &

#nswtrains Real Time
python gtfsrdb_tfnsw.py -p 'https://api.transport.nsw.gov.au/v1/gtfs/vehiclepos/nswtrains' --database="postgresql://localhost/test" --apikey="XXX" -m "nswtrains" -c -1 &
python gtfsrdb_tfnsw.py -t 'https://api.transport.nsw.gov.au/v1/gtfs/realtime/nswtrains' --database="postgresql://localhost/test" --apikey="XXX" -m "nswtrains" -c -1 &
python gtfsrdb_tfnsw.py -a 'https://api.transport.nsw.gov.au/v1/gtfs/alerts/nswtrains' --database="postgresql://localhost/test" --apikey="XXX" -m "nswtrains" -c -1 &

Това е, което поставих в crontab:

# GTFSR to Database
* * * * * ( /bin/bash /home/amarinS/projects/TfNSW_GTFSRDB/GTFSR_call)
* * * * * ( sleep 30 ; /bin/bash /home/amarinS/projects/TfNSW_GTFSRDB/GTFSR_call)

Ако стартирам /bin/bash /home/amarinS/projects/TfNSW_GTFSRDB/GTFSR_call ръчно, bash скриптът работи добре. Но нищо не се случва, когато заданието се изпълнява през CRONTAB.

Моля помогнете.

наздраве!


person Tara Sutjarittham    schedule 09.07.2017    source източник
comment
Опитайте да поставите безкраен цикъл в bash скрипта и добавете sleep 30 в края. Добавете това към crontab @reboot bin/bash /path/to/script/GTFSR_call. И рестартирайте машината, за да се уверите. След това вашият scrpit ще работи във фонов режим, докато рестартирате системата.   -  person Lucas Henrique    schedule 09.07.2017


Отговори (2)


Уверете се, че създавате cron записите като root. Това ми се е случвало в миналото.

Проверете вашите env променливи и интерпретатора на python.

Уверете се, че всички скриптове са изпълними.

person Joe    schedule 09.07.2017

  1. може да се окаже, че на скрипта, изпълняван от crontab, липсват някои променливи на средата, от които се нуждае, за да работи правилно. вижте дали това помага
  2. може да е от полза да пренасочите изхода на bash (както stdout, така и stderr) към лог файл, за да можете да знаете защо не е успял
  3. (странична бележка): поставянето на sleep 30 във вашата cron дефиниция звучи като лоша идея. защо го направи?
person akiva    schedule 09.07.2017
comment
Използвам sleep 30, защото crontab по подразбиране ще се изпълнява на всяка 1 минута. Така че заобиколих, като настроих второто задание да се изпълнява след 30 секунди. Това води до един и същ скрипт, който се изпълнява на всеки 30 секунди. Има ли по-добър начин да направите това? - person Tara Sutjarittham; 09.07.2017