質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.64%

cronでスケジュールしたシェルスクリプトが実行されない

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 862

raccoondog

score 17

solaris 11の環境で、シェルスクリプトを作成し実行テストをしたところ成功しました。
cronに登録してスケジュール実行させると失敗します。

原因不明の状況です。

■実行ユーザの権限 srdcsユーザ
srdcs04% env
USER=srdcs
LOGNAME=srdcs
HOME=/export/home/srdcs
PATH=/bin:/usr/bin:/usr/ucb:/etc:.:/usr/sfw/bin/gcc:/export/home/srdcs/embulk_test/bin/embulk
MAIL=/var/mail//srdcs
SHELL=/bin/csh
TZ=Japan
LANG=ja
TERM=xterm
DISPLAY=localhost:14.0
PWD=/export/home/srdcs

■crontab設定

srdcs04% crontab -l

0,10,20,30,40,50 * * * * /bin/bash /export/home/xxxxxx/embulk_test/sh/bulkinsert_T_RS_TRAN.sh

■シェルスクリプト
srdcs04% cat /export/home/xxxxxx/embulk_test/sh/bulkinsert_T_RS_TRAN.sh
#
# 環境変数設定
#

export EMBULK_CMD="/export/home/xxxxxx/embulk_test/bin/embulk/embulk-0.9.15.jar run"
export EMBULK_CONF="/export/home/xxxxxx/embulk_test/conf/config_incremental_T_RS_TRAN.yml.liquid"
export EMBULK_DIFF="-c /export/home/xxxxxx/embulk_test/conf/diff_T_RS_TRAN.yml"
export EMBULK_LOG="/export/home/xxxxxx/embulk_test/log/bulkinsert_T_RS_TRAN.log"
export MAIL_CMD="/usr/sbin/sendmail"
export mail_T_RS_TRAN_file="/export/home/xxxxxx/embulk_test/mail/mail_T_RS_TRAN_file"
export CHECK_T_RS_TRAN_LOG="/export/home/xxxxxx/embulk_test/mail/check_T_RS_TRAN.log"
export ERROR_CODE_001="Error"
export TIME="`date '+%y/%m/%d %H:%M:%S'`"
export MAIL_CMD="/usr/sbin/sendmail"
export mail_T_RS_TRAN_file="/export/home/xxxxxx/embulk_test/mail/mail_T_RS_TRAN_file"
export CHECK_T_RS_TRAN_LOG="/export/home/xxxxxx/embulk_test/mail/check_T_RS_TRAN.log"
#export MAIL_LIST="/export/home/xxxxxx/embulk_test/mail/mail.list"
export ADDR="xxx@xxx"
export ERROR_CODE_001="Error"

#
# メールヘッダ部作成
#

echo "====================="    >> ${mail_T_RS_TRAN_file}
echo "DATE : ${TIME}"           >> ${mail_T_RS_TRAN_file}
echo "HOST : `hostname`"        >> ${mail_T_RS_TRAN_file}
echo "====================="    >> ${mail_T_RS_TRAN_file}
echo "Message:"                 >> ${mail_T_RS_TRAN_file}

#
# バルクインサート実行
#

${EMBULK_CMD} ${EMBULK_CONF} ${EMBULK_DIFF} >> ${EMBULK_LOG}

if [ $? -ne "0" ]; then
   echo "====================="  >> ${CHECK_T_RS_TRAN_LOG}
   echo "DATE : ${TIME}"         >> ${CHECK_T_RS_TRAN_LOG}
   echo "Embulk command Error T_RS_TRAN_TABLE" >> ${CHECK_T_RS_TRAN_LOG}
   echo "Embulk command Error T_RS_TRAN_TABLE" >> ${mail_T_RS_TRAN_file}
   ${MAIL_CMD} -f embulk_srdcs04@jp.xxxxx.com ${ADDR} < ${mail_T_RS_TRAN_file}
   exit 1
fi
echo "====================="    >> ${CHECK_T_RS_TRAN_LOG}
echo "DATE : ${TIME}"                   >> ${CHECK_T_RS_TRAN_LOG}
echo "Embulk command success T_RS_TRAN_TABLE"   >> ${CHECK_T_RS_TRAN_LOG}

#
# ログファイルチェック
#

while :;
do
  cat ${EMBULK_LOG} | grep "${ERROR_CODE_001}" >> ${mail_T_RS_TRAN_file}
      if [ $? = "0" ];then
        echo "====================="  >> ${CHECK_T_RS_TRAN_LOG}
        echo "DATE : ${TIME}"         >> ${CHECK_T_RS_TRAN_LOG}
        echo "Embulk Log Error T_RS_TRAN_TABLE" >> ${CHECK_T_RS_TRAN_LOG}
        ${MAIL_CMD} -f embulk_srdcs04@jp.xxxxx.com ${ADDR} < ${mail_T_RS_TRAN_file}
        exit 1
      else
        break
      fi
done

#
# ログ整理
#
echo "====================="    >> ${CHECK_T_RS_TRAN_LOG}
echo "DATE : ${TIME}"                   >> ${CHECK_T_RS_TRAN_LOG}
echo "Embulk Log success T_RS_TRAN_TABLE"   >> ${CHECK_T_RS_TRAN_LOG}

rm -r ${mail_T_RS_TRAN_file}

exit 0


■実行結果
srdcs04% tail -f check_T_RS_TRAN.log
=====================
DATE : 19/03/05 15:00:00
Embulk command Error T_RS_TRAN_TABLE


■cronの権限
srdcs04% ls -ltrh /var/spool/cron/crontabs

-rw-------   1 root     xxxxxx       1.2K  3月  5日  15:20 srdcs
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • CHERRY

    2019/03/05 18:19

    原因不明ということですが、 cronから、メールでエラーメッセージが、srdcs ユーザー宛てに届いていませんか?

    キャンセル

  • raccoondog

    2019/03/05 18:47

    ご回答有難うございます。
    メールには以下のメッセージがありました。

    EMBULK_CMD="/export/home/xxxxxx/embulk_test/bin/embulk/embulk-0.9.15.jar run" is not an identifier

    キャンセル

  • t_obara

    2019/03/05 18:56

    ↑の確認が最初、それ以外としては、実行時の環境変数を比較してみます。おそらく設定されている環境変数がシェルで実行した場合と異なっているので、その場合、bashに-lオプションをつけてみてください。

    キャンセル

  • raccoondog

    2019/03/05 20:08

    ご回答有難うございます。
    cronの定義に
    ****** /bin/bash -l /xxx/xxx.sh とすればよろしいでしょうか?

    キャンセル

回答 4

checkベストアンサー

+1

is not an identifierといわれた場合、

export EMBULK_CMD="/export/home/xxxxxx/embulk_test/bin/embulk/embulk-0.9.15.jar run"


のような行を

EMBULK_CMD="/export/home/xxxxxx/embulk_test/bin/embulk/embulk-0.9.15.jar run"
export EMBULK_CMD


と二行にわけてはどうでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

solaris 11 bashで監視スクリプト
でotnさんが書かれているとおり

まずは、Linuxのコマンドライン操作の基本から学んではどうでしょうか?

私もこちらの意見に賛同します。
Amazon等で「シェルスクリプト」と検索して何冊か本を買って読むことをお勧めします。

exit 1と書いていたらスクリプトはそこで止まりますよ。

うまく実行できていない場合はログファイルをご覧ください。

追伸

https://teratail.com/questions/175417#reply-261314
に書きましたが、doubleでもEmbulkのincrementalは使えるような気がします。
失礼しました。お手すきの際にご確認ください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/05 17:17

    ご指摘有難うございます。

    ただ、想定通りログをチェックして、エラー文字列を検索した際にはメール送付できるように動きまして、あとはcronで自動実行できれば一旦ドラフト版としてリリースさせたい状況となります。

    cronでなぜ動かないかを知りたいです。

    コーディングの精度やロジック見直しについては、今後プロジェクト内で精査してブラッシュアップさせる予定です。

    ひとまず動かす。を目標としています。

    キャンセル

  • 2019/03/05 17:28

    私も含めて他の方もこれをみてなぜ動かないのかと質問されても答えようがないと思います。
    先ほど申し上げたとおりりログをご確認ください。
    結果を出力されているファイル、cronのログを確認すれば何かわかるのではないでしょうか?

    キャンセル

+1

export EMBULK_CMD="/export/home/xxxxxx/embulk_test/bin/embulk/embulk-0.9.15.jar run"
中略
${EMBULK_CMD} ${EMBULK_CONF} ${EMBULK_DIFF} >> ${EMBULK_LOG}

Windowsでない限り、jarファイルを実行する時はjavaコマンドで実行するものと思っていましたが、違いますでしょうか。

/export/home/xxxxxx/embulk_test/log/bulkinsert_T_RS_TRAN.log

に結果が記載されています。差し支えなければ内容を追記お願いします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/05 17:59

    すいません。書く場所を間違えました。

    kaztoさん

    > Windowsでない限り、jarファイルを実行する時はjavaコマンドで実行するものと思っていましたが、違いますでしょうか。

    Embulkは色々手を加えて、jarファイルの先頭にシェルスクリプトとバッチファイルが組み込まれています。
    そのため通常のシェルスクリプトと同様に実行権限をセットすればコマンドが実行できるようになっています。
    余談ですが、shbangが入っていないのでfishなどでは動きません。

    キャンセル

  • 2019/03/05 18:07

    なるほど、浅学でした。

    キャンセル

+1

EMBULK_CMD="/export/home/xxxxxx/embulk_test/bin/embulk/embulk-0.9.15.jar run" is not an identifier

このエラーが出るということは、sh で、実行されているのかなぁ。

たとえば、定義部分を

EMBULK_CMD="/export/home/xxxxxx/embulk_test/bin/embulk/embulk-0.9.15.jar run"
export EMBULK_CMD


のように2行に分けたら、実行できますか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる