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スクリプトに提供されているすべての引数を関数として「転送」する必要があります。