• ベストアンサー

crontabで実行されない部分がある・・・?

MySQLに登録されたユーザ名とアカウント名でLinuxのユーザを作る シェルスクリプトを作りました。 ルートにおいてあって、 ./test.sh とすると、 1.useraddでユーザが作られる 2.MySQLの予約テーブルから登録済テーブルにユーザ情報を書き換える 3.FTPユーザ登録がされる というものです。 これをcrontabで走らそうと思いました。 su -でルートになって、 crontab -e * * * * * /test.sh としたのですが、2.3は実行されました。 しかし1.のユーザ作成がされませんでした。 スクリプトいじった記憶はないですが一応確認ということで、 crontabをとめて手動でやってみたところ、1.2.3全て実行されました。 コードも悪くないし、crontab登録もルートでやったのに上手く行かなくて、 途方に暮れています。 何か思いつく原因があったら御教授ください。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mflow
  • ベストアンサー率63% (42/66)
回答No.3

スクリプト内で使用しているコマンドへのパスを絶対で指定してみてください。 ファイルを扱っているならばファイルへのパスも絶対で指定してください。

sollalice
質問者

お礼

ありがとうございます。 絶対パスで通したところ、上手く行きました。 その後、削除すべきファイルが削除されない問題が出ましたが、 そこも同じように解決できました。 ありがとうございました。

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

crontabで動く時のPATHは特に指定しなければ /usr/bin:/bin です。 useraddは普通 /usr/sbin/ にあるので、フルパスで書かないと動かないです。 そもそも、cronジョブでエラーになればユーザー(この場合root)にメールが送られているはずです。そこにエラーメッセージが出ています。rootでmailコマンド。

sollalice
質問者

お礼

ありがとうございます。 エラーメッセージの読み方等良く分かりませんが、 エラーの解析はサーバ管理の肝になる部分なので、 しっかり勉強しようと思います。 ありがとうございました。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

直接の回答ではないですが、 /test.sh > /test.log 2>&1 としてエラーログが出力されてないか調べてみてはいかがでしょうか。

sollalice
質問者

お礼

ありがとうございます。 手動でエラーログを出力させる方法があるんですね。 調べて次回使ってみようと思います。

noname#39970
noname#39970
回答No.1

* * * * * root /test.sh とかじゃなかったっけ?書き方

sollalice
質問者

お礼

ありがとうございます。 crontab -u root -lで見たところちゃんとrootで動くように なっていました。

関連するQ&A