2017-07-09 53 views
1

私はLinuxの初心者です。私は複数のpythonスクリプトを30秒ごとに実行したいので、bashスクリプト(複数のpythonスクリプトを同時に実行する)とcrontab(スクリプトを30秒ごとに実行するようにスケジュールする)を使用してこれを行う予定です。複数のPythonスクリプトを実行するbashスクリプトを実行するCrontab

#!/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スクリプトが正常に動作します

これは私のbashスクリプトがどのようです。しかし、ジョブがCRONTAB経由で実行されても何も起こりません。

助けてください。

乾杯!

+0

bashスクリプトの中に無限ループを入れ、最後に 'sleep 30'を追加してみてください。これをcrontab '@reboot bin/bash/path/to/script/GTFSR_call'に追加してください。そしてマシンを再起動して確認してください。 scrpitは、システムを再起動するとバックグラウンドで実行されます。 –

答えて

0

rootでcronエントリを作成していることを確認してください。私は過去に私を得ることができました。

env変数とPythonインタプリタを確認してください。

すべてのスクリプトが実行可能であることを確認してください。

0
  1. crontabから実行されているスクリプトでは、正常に動作するために必要な環境変数が不足している可能性があります。 this
  2. あなたはそれが失敗した理由を知ることができるように、ログファイルへのbash出力(stdoutとstderrの両方)をリダイレクトすることが有益であるかもしれないの場合に役立ちます は見
  3. (サイドノート):あなたのcronで睡眠30を置きます定義が悪い考えのように聞こえる。どうしてそんなことをしました?
+0

デフォルトのcrontabは1分ごとに実行されるため、sleep 30を使用します。だから私は30秒後に実行するようにセカンドジョブを設定することで回避しました。これにより、30秒ごとに同じスクリプトが実行されます。これを行うより良い方法はありますか? –

関連する問題