こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

crontabでのシェル自動実行がNG

いつも参考にさせてもらっています。
linux(Red Hat Enterprise Linux ES release 3 Apache/2.0.46)上でcrontabを設定したいのですが、
現在うまくいっておりません。

まず、autoindex.shというシェルを/home/foo/scripts/ディレクトレィに作成しました。中身は3行からなっていて

#!/bin/sh
cd /var/www/html/search/index
mknmz -a /var/www/html/test

です。telnet上でroot権限を使用し、./autoindex.shコマンド発行で正常に動作しました。

そこで、crontabに以下のように

# crontab -l
50 11 * * * root /home/foo/scripts/autoindex.sh

と設定したところ、

# more /etc/log/cron
Sep 27 11:50:01 intra crond[18280]: (root) CMD (root /home/foo/scripts/autoindex.sh )

とcronは決めていた時間(11時50分)に稼動しているようなんですが、mailを見ると

# mail -t

From root@XXX.com Wed Sep 27 11:50:01 2006
Date: Wed, 27 Sep 2006 11:50:01 +0900
From: root@XXX.com (Cron Daemon)
To: root@XXX.com
Subject: Cron <root@hoge> root /home/foo/scripts/autoindex.sh
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>

/bin/sh: line 1: root: command not found

と、シェルがこけているようです。

何か解決のヒントがありましたら、ぜひ教えていただけないでしょうか。

投稿日時 - 2006-09-27 13:00:59

QNo.2434909

困ってます

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

rootで実行しているのに実行できないなら、やはりmknmzへのパスが通ってないのだと思います。
command not found と出るのは、パスが通ってない場合に出ますから。
実行権限がなくてこけるときはPermission Deniedと出るはずです。

シェルのmknmzをフルパスで書いてみたらどうなりますか?

投稿日時 - 2006-09-27 15:50:07

お礼

何度もありがとうございます。mknmzをフルパス(/usr/local/bin/mknmz)で記入したら、見事にシェルが動きました。

パスを通すことも研究してみます。ありがとうございます。

投稿日時 - 2006-09-27 17:57:24

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

No.1です。

> mknmzコマンドはrootじゃないと実行できないからだめなのかなーと思いますが・・・

とのことですが、このcrontabはrootでログインして設定しているのではないのですか?
crontabはユーザごとに設定します。
(/etc/cron.allowや/etc/cron.denyが設定されていると、許可されたユーザだけが設定できますが)
そして、そのユーザの権限で、指定したコマンドが実効されます。
rootで動かしたいのであれば、rootでログインしてcrontabを設定する必要があります。

あと蛇足かもしれませんが、mknmzへのパスは通ってますか?

投稿日時 - 2006-09-27 14:39:16

お礼

>crontabはrootでログインして設定しているのではないのですか?

そのとおりです。rootでログインしてcrontabを設定しています。

mknmzコマンドはrootでないと実行できないので、何とかしたいのですが。

投稿日時 - 2006-09-27 15:01:46

ANo.1

crontabの書式は、
分 時間 日 月 曜日 コマンド名
です。

> # crontab -l
> 50 11 * * * root /home/foo/scripts/autoindex.sh

これだと、「root /home/foo/scripts/autoindex.sh」というコマンドを実行するという意味になっていまい、rootというコマンドはないので、

>/bin/sh: line 1: root: command not found

と出ているのだと思います。

参考URL:http://www.linux.or.jp/JM/html/cron/man5/crontab.5.html

投稿日時 - 2006-09-27 13:23:32

お礼

ham_kamoさん、さっそくのご回答ありがとうございます。

> # crontab -l
> 40 13 * * * /home/foo/scripts/autoindex.sh

今度はrootを外してみましたが、またもNGでした。

mknmz: command not foundInterrupt

mknmzコマンドはrootじゃないと実行できないからだめなのかなーと思いますが・・・

投稿日時 - 2006-09-27 13:49:43