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

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

新規登録して質問してみよう
ただいま回答率
85.37%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Embulk

Embulkは、CSVデータやアクセスログなどの構造化データを高い信頼性で転送することができる、プラグインベースのバルクデータローダーです。

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Solaris

Solarisは、SunSoft社が開発・販売を行っているUnix系のOSです。Sun Microsystems社製コンピュータで動作し、またPC/AT互換機で動作するバージョンもあります。旧名称は「SunOS」ですが、現在はSolarisのカーネル部分をSunOSと呼んでいます。

Q&A

解決済

4回答

4633閲覧

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

raccoondog

総合スコア79

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Embulk

Embulkは、CSVデータやアクセスログなどの構造化データを高い信頼性で転送することができる、プラグインベースのバルクデータローダーです。

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Solaris

Solarisは、SunSoft社が開発・販売を行っているUnix系のOSです。Sun Microsystems社製コンピュータで動作し、またPC/AT互換機で動作するバージョンもあります。旧名称は「SunOS」ですが、現在はSolarisのカーネル部分をSunOSと呼んでいます。

0グッド

0クリップ

投稿2019/03/05 06:35

編集2019/03/05 06:38

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

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2019/03/05 09:19

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

2019/03/05 09: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 09:56

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

2019/03/05 11:08

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

回答4

0

ベストアンサー

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

sh

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

のような行を

sh

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

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

投稿2019/03/05 15:33

fu7mu4

総合スコア1088

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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行に分けたら、実行できますか?

投稿2019/03/05 09:59

CHERRY

総合スコア25216

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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 08:42

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiroysato

2019/03/05 08:59

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

2019/03/05 09:07

なるほど、浅学でした。
guest

0

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

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

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

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

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

追伸

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

投稿2019/03/05 07:59

hiroysato

総合スコア415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raccoondog

2019/03/05 08:17

ご指摘有難うございます。 ただ、想定通りログをチェックして、エラー文字列を検索した際にはメール送付できるように動きまして、あとはcronで自動実行できれば一旦ドラフト版としてリリースさせたい状況となります。 cronでなぜ動かないかを知りたいです。 コーディングの精度やロジック見直しについては、今後プロジェクト内で精査してブラッシュアップさせる予定です。 ひとまず動かす。を目標としています。
hiroysato

2019/03/05 08:28

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問