53

Python スクリプトが crontab で実行されていません。

これを python スクリプトの一番上に配置しました。

#!/usr/bin/python

私はこれをやってみました:

chmod a+x myscript.py

私のに追加crontab -e

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""

* * * * * /home/me/project/myscript.py

/var/log/cron ファイルには次のように記載されています。

Sep 21 11:53:02 163-dhcp /USR/SBIN/CROND[2489]: (me) CMD (/home/me/project/myscript.py)

しかし、SQL データベースをチェックしても何も変わっていないため、スクリプトは実行されていません。次のようにターミナルで直接実行すると:

python /home/me/project/myscript.py

正しい結果が得られます。

これは次のmyscript.pyとおりです。

#!/usr/bin/python

import sqlite3

def main():
    con = sqlite3.connect("test.db")

    with con:

        cur = con.cursor()

        cur.execute("CREATE TABLE IF NOT EXISTS testtable(Id INTEGER PRIMARY KEY, Name TEXT)")

        cur.execute("INSERT INTO testtable(Name) VALUES ('BoB')")

        cur.execute("SELECT * FROM testtable")

        print cur.fetchall()    

if __name__ == "__main__":
    main()

コメントごと: はい、/usr/bin/python存在します。を使用して python スクリプトを直接実行することもできます/home/me/project/myscript.py/usr/bin/python /home/me/project/myscript.py動作します。だから私はこれが原因だとは思わないのですか?

4

15 に答える 15

41

入力するとどうなりますか

/home/me/project/myscript.pyシェルに?

/usr/bin/pythoncrontbbコマンドで明示的に使用できますか?

test.db 自分のディレクトリまたは正しいディレクトリへの絶対パスを使用してcd、Pythonスクリプトを実行できますか?

これは、Pythonにデバッグステートメントを含め、いくつかのデータをログに記録するのに役立ちます。Crontabは、デバッグが非常に難しい場合があります。

于 2012-09-21T17:13:02.843 に答える
17

Python インタープリターが見つからないため、スクリプトが開始されない可能性があります。Crontab 環境は、使用しているシェル環境とは大きく異なる場合があります。検索パスは大幅に異なる場合があります。また、crontab がスクリプトのみを開始することを期待しながら、Python インタープリターを明示的に開始してスクリプトをテストします。この行を Python スクリプトの先頭に追加します。

\#!/bin/env python

この行は、検索パスにある限り、インストールされているディレクトリに関係なく、インタープリターを見つけるのに役立ちます。

于 2012-09-21T16:15:36.527 に答える
3

私は同じ問題を抱えていました。手動で実行されたスクリプトが機能していたという事実にもかかわらず、crontab では上記のオプションはまったく機能していませんでした。スクリプトを /home/user/script_directory/ から /opt/scripts/ に移動したところ、機能し始めました。問題の原因として、ホーム ディレクトリにあるサブフォルダへのアクセス (読み取り) 権限が考えられます。

于 2014-12-31T13:18:21.053 に答える
1

ここでの回答は問題と解決策を明確に示していますが、私に役立つ別の回答を追加したかったのです。

Pythonスクリプトがデータベースを呼び出している場合は、cron環境内でデータベースに正しく接続できることを確認してください(cron環境を識別するため--> https://askubuntu.com/questions/23009/reasons-why-crontab-機能しません)。Pythonスクリプト内からルートとしてデータベースに接続しない限り、シェルから実行されるファイルがありましたが、crontabとしては実行されませんでした。

于 2013-09-26T15:23:24.630 に答える
1

時々私は同じ問題に直面しています。ここでアドバイスされているように何かを試しても、結果が得られない場合があります。

そこで、「トリガー」bash スクリプトを次のように書き始めます (trigger.sh という名前にしましょう)。

#!/bin/bash

/full_path/python_script.py

そして、crontabからtrigger.shを呼び出していますが、すべて問題ありません。

編集:もちろん、次のことを忘れないでください(実行権を与えてください):

$chmod +x python_script.py
$chmod +x trigger.sh
于 2016-01-25T12:15:24.867 に答える
0

crontabに入れてみてください:

* * * * * python /path/to/your/script.py

それよりも

* * * * * /path/to/your/script.py

また、シバンラインは#!/usr/bin/env pythonいくつかの環境にあります。envは実行可能ファイルであり、「」とともにどこにあるかを知る必要があります$ which env

于 2012-09-21T17:20:16.340 に答える
0
  • cron ユーザー (スクリプトが失敗した場合) と端末ユーザー (スクリプトが成功した場合) は同じですか?
  • Cron Job Log - How to Logに記載されているように、ジョブの出力をファイルにリダイレクトできますか? . それが役立つかどうかを確認できました。
于 2012-09-21T18:12:04.820 に答える