![Cronジョブで「サービス:[該当するファイルまたはディレクトリ]が見つかりません」というエラーが発生しますが、ターミナルスクリプトで手動で実行すると正常に動作します。](https://linux33.com/image/99078/Cron%E3%82%B8%E3%83%A7%E3%83%96%E3%81%A7%E3%80%8C%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%EF%BC%9A%5B%E8%A9%B2%E5%BD%93%E3%81%99%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%5D%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%8D%E3%81%A8%E3%81%84%E3%81%86%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%A7%E6%89%8B%E5%8B%95%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%A8%E6%AD%A3%E5%B8%B8%E3%81%AB%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82.png)
service jbossas status
-> コマンドはjbossasの状態を確認します。
jbossas(PID)が実行されています(jbossasが実行されている場合)。
jbossasが停止しました(jbossasが停止した場合)。
#!/bin/ksh
#set -x
OUT_LOG="$1"
stus=$(service jbossas status)
var=$(ps -ef | grep -i '[/]jboss')
hname=$(hostname)
if [ -z "$var" ]; then
echo "service jbossas status" >>$OUT_LOG
echo "$stus" >>$OUT_LOG
mail -s "Please check for possbile impact $(stus)" [email protected] << $OUT_LOG
else
echo "'$stus'"
fi
注:JBOSSプロセスはサーバー上で実行されていないため、ジョブはjboss停止します。
シェルでスクリプトを手動で実行する場合(黒い画面cmdプロンプト)
./jboss_status.ksh
次の件名を含むメールが届きましたが、スクリプトは正常に実行されました。
「jbossasの停止によって引き起こされる可能性のある影響を確認してください。」
しかし、cronでスケジュールを予約すると
* * * * * /aaa/jboss_status.ksh > /aaa/jboss_status.ksh.error 2>&1
以下の件名のメールが届きました。 「可能な影響を確認してください」注:「jbossasが停止しました」はタイトルの末尾に印刷されません。
cronで生成されたエラーファイルで次のエラーが発生します。
/aaa/jboss_status.ksh[20]: service: not found [No such file or directory]
スクリプトはcronでうまく実行されますが、出力を返します。
command : service jbossas status
op: jboss stopped
タイトルに印刷されない
答え1
スクリプトの上部に bash_profile または bash_rc をインポートする必要があるかもしれません。
Ubuntuから
source /home/<user>/.bash_profile
その他のLinux
source /home/<user>/.bash_rc
答え2
cronを実行しているユーザーのPATH変数を確認しましたか?使用しているスクリプトへのパスまたはその依存関係が必要です。パス比較:
echo $PATH
スクリプトを手動で実行しているユーザーと、cronでスクリプトを実行しているユーザーの下にあります。