私はLinux VMで作業しており、毎晩11:35にAPIを呼び出し、データをGoogle Cloud StorageにエクスポートするPythonスクリプトを実行するクローンタスクを実行しています。
毎日 11:35 に Google バケットから毎日のエクスポートを実行します。たとえば、2 月 10 日午後 11 時 35 分にエクスポートし、ファイルを仮想 crontab -l
マシンに入力すると、次のような結果になります。
35 22 * * * /home/worker/xxxx/yyyy/launch.sh
start.sh
#!/bin/bash
BASE_PROJECT="/home/worker/xxxx/yyyy"
export PYTHONPATH="${BASE_PROJECT}"
export GOOGLE_USER_CREDENTIALS="${BASE_PROJECT}/credentials_red.json"
export PIPENV_PIPFILE="${BASE_PROJECT}/ingestion/Pipfile"
pipenv run python "${BASE_PROJECT}/ingestion/main.py"
GCSのファイル:
私のファイルは12月から2月14日まで毎日11:35にエクスポートされ、その後Google Cloud Storageにエクスポートされたファイルはゼロです。 2月14日にいくつかの変更を適用しましたが、ingestion/main.py
それが原因かもしれませんが、可能であれば問題が何であるかを知りたいです。今日の最初のことは、ingestion/main.py
2月14日以降のバージョンを復元することでした。私がした他のことは:
スクリプト
ingestion/main.py
が外部APIを呼び出しています。今日は、問題が資格情報に関連していることを確認するために、仮想マシンに保存されている資格情報を使用してデスクトップ上で同じAPIを呼び出しました。データを再インポートできるため、これは問題ではありません。その後、仮想マシンで直接実行することに決め、すべてのファイルをGoogle Cloud Storageにインポートしたので、実際に動作しました(実行時に以前のバージョンを復元しました)
launch.sh
。ingestion/main.py
それでも問題の原因が何であるかよくわかりません。実行しましたが、sudo grep CRON var/log/syslog
数行だけ実行しました。私のcronjobが実行されていない理由に関する詳細情報を取得する方法はありますか?
答え1
出力(正常またはエラー)がある場合は、スクリプトを実行しているLinuxユーザーに電子メールで送信されます。
.forward
仮想マシンがメールを広範囲に送信するように構成されていない場合、またはLinuxでインターネットにメールを中継するように設定していない場合は、メールがまだ残っている可能性があるため、mail
コマンドラインで試してください。
スパムを直接送信するには、以下を追加してください。
[email protected]
crontabの最初の行に。
答え2
crontab
あなたのものを変えなさいリダイレクトスクリプトからのすべての出力は、ホームディレクトリ(または権限があり、そうする場合は別の場所)のログファイルに移動されます。ジョブcron
が実行中なので非対話型シェルstdin
その後、stdout
「ビットバケット」(/dev/null
)に移動します。エラーが発生した場合は役に立ちません。
次の修正crontab
項目を試してください。
35 22 * * * /home/worker/xxxx/yyyy/launch.sh >> /home/worker/cronlog.txt 2>&1