Pythonスクリプトは手動で実行されますが、cronjobでは実行されません。

Pythonスクリプトは手動で実行されますが、cronjobでは実行されません。

だからこれは非常に奇妙な質問です。特定の条件に応じて、subprocess.callを介して多くのbashコマンドを呼び出すPythonスクリプトがあります。スクリプトは手動で正常に実行されますが、cronjobに入れると失敗しますが、コードの特定の部分に達したときにのみ失敗します。コードのこの部分は、bstatユーザーに対してコマンドを実行します。bkillどちらのコマンドでも subprocess.call、subprocess.Popen、subprocess.check_output を試してみましたが、到達するたびに停止して何もしません。その後、var / spool / mail / rootにこのメッセージが表示されます。

File "/root/Desktop/script.py", line 75, in <module>
    print subprocess.check_output(['bstat' '-q' 'viz' '-u' ,user,])
  File "/usr/lib64/python2.7/subprocess.py", line 568, in check_output
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

私は可能なすべてのコマンドに絶対パスを使用し、実行する前にディレクトリをスクリプトディレクトリに変更し、実行する前に/ bin / pythonを呼び出そうとしました。私は完全に圧倒されました。もう1つのことは、bashスクリプトを呼び出すときに正しく機能する他のsubprocess.callコマンドがありますが、これら2つのコマンドについて何をすべきかわからないということです。最初に中断されたサブプロセスコマンドは次のとおりです。

print subprocess.check_output(['bstat' '-q' 'viz' '-u' ,user,])

答え1

bstatcron環境に$ PATH`がない場合、子プロセス呼び出しは...またはプログラムを探します。 Pythonスクリプト内でも、これらのプログラムのフルパスを指定すると機能します。bkill$PATH

関連情報