cronを介してbash関数にカプセル化されたPythonスクリプトを実行する

cronを介してbash関数にカプセル化されたPythonスクリプトを実行する

bash関数でラップするPythonスクリプトがあります。この関数をcronジョブとして呼び出したいのですが、cronでこれを実行できないようです。
機能は次のとおりです。

 #!/bin/bash

getmail(){
    local interp=/path/python3
    local cmd=/path/python-script
    local logfile=/path/logfile

    if [ "$1" == "-logs" ]; then 
        $interp $cmd >> $logfile

    else 
        $interp $cmd
     fi
 }

その後、関数をインポートして実行するスクリプトを作成し、cronから関数を呼び出すことを望みました。

 #!/bin/bash

  source /path/getmail
  getmail

このcronスクリプトを実行可能にするために適切な権限を割り当てましたが、cronはスクリプトを実行しません。 cronを介してPythonスクリプト自体を実行できますが、bash関数でラップされません。私は理由を知りたいだけです。これはcronが使用するインタプリタと関連がありますか? cronタブにSHELL = / bin / bashを設定しました。誰かが私にこれを説明できますか?

ベストアンサー1

うまくいかないとどう思いますか?
実際、あなたがすることはほとんど効果があります。
二つだけ言及すればいいです。
1. 関数を含むファイルの '#!/bin/bash/' は不要で、ファイルがソースとして提供されるため、機能はありません。
2. "-logs" 引数は引数なしで (スクリプトで) 関数を呼び出すので、 "getmail()" 関数には絶対に含まれません。
Bashスクリプトを次のように修正してもう一度やり直してください。

#!/bin/bash

source /path/getmail
getmail $@

これは、bashスクリプトに提供されているすべての引数を関数として「転送」する必要があります。

おすすめ記事