さくらのレンタルサーバー(スタンダード)でのCRONの設定についての質問です。


現在/home/ユーザ名/www直下にcron.sh(権限705)をアップロードして置いてあります。
この場合、サーバーコンパネのCRONの設定の実行コマンドはどのように書けばよいでしょうか?

↓よく解らないのですが書いてみました。当然/usr/local/bin/sh: not foundなんてエラーが出てしまいます。
cd /home/ユーザ名/www/ ; /usr/local/bin/sh cron.sh???

cron.shの中身の記述は以下です。
#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
cd /home/ユーザ名/www/
FETCH_URL=http://www.ユーザ名.com/cron/fetch_items
FETCH_ID=xxxxxxxx
WORK_DIR=/tmp

cd $WORK_DIR
/usr/local/bin/wget -q $FETCH_URL/$FETCH_ID > /dev/null 2>&1
rm $FETCH_ID

色々突っ込みどころがあるかとは思いますが
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2010/03/23 22:58:15
  • 終了:2010/03/26 22:59:05

ベストアンサー

id:snufkinski No.5

Snufkinski回答回数41ベストアンサー獲得回数112010/03/25 11:05:41

ポイント20pt

>rm: xxxxxxxx: No such file or directoryなんて

>言われて怒られちゃいました。。。

であれば、"cron.sh"内は走ってるんじゃないでしょうか?

共有サーバはセキュリティ上やリソースの関係など様々な都合から制限を設けてあることが一般的です。

例えば、だれもが設定する朝方4:30頃のクーロン実行を負荷軽減のために少しずつずらされたりして

一度に50ユーザとかがバッチプログラムを走らせるなどの負荷を分散したりということもあります。


クーロンが走っているのか心配であれば、

先ずは試しに、cron.shを以下のようにして確認されてみてはいかがでしょうか?

◆ファイルを作成して確認

#!/bin/sh
echo "Hi, I'm running" > /home/[ユーザ名]/www/test_cron.txt

◆メールを送って確認

#!/bin/sh
mail -s crontest [メールアドレス]

◆wget が機能しているかの確認(自身のユーザ領域にGet)

#!/bin/sh
wget http://www.yahoo.com/ -O /home/[ユーザ名]/www/test_wget.html

あと、

>WORK_DIR=/tmp

>cd $WORK_DIR

推測で恐縮ですが・・・これは許されていないと思います。

一般にユーザホームディレクトリより上には行けないと思いますし、アクセスもできないと思います。

(ご質問者さんの場合、/home/ユーザ配下以外)

それを許せば、他のユーザさんの一時ファイルにもアクセスできちゃいますし、

それ以外にもいろいろできちゃいますよね?

id:dreamworks

回答ありがとうございます。

メールは大丈夫なようです。

WORKディレクトリについては

もう一度考えてみます。

バッチがずれるのは了解しました!

2010/03/26 22:56:58

その他の回答(4件)

id:GreenStar No.1

GreenStar回答回数192ベストアンサー獲得回数462010/03/24 00:06:00

ポイント20pt

動かしてないけどカレントディレクトリをwwwに変える意味がわかんない! いきなりWORK_DIRに変えていいんじゃない?

wgetもフルパスにする必要ないと思うよ!!

#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
FETCH_URL=http://www.ユーザ名.com/cron/fetch_items
FETCH_ID=xxxxxxxx
WORK_DIR=/tmp
cd $WORK_DIR
wget -q $FETCH_URL/$FETCH_ID > /dev/null 2>&1
rm $FETCH_ID

でも、大本は、これが原因じゃないの??

http://senrioka-info.net/0_google_sitemap/cron.htm

# cron.sh のパーミッション(属性)を 700 に変更 ← 重要!忘れる人が多い

id:dreamworks

回答ありがとうございます。

実行コマンドを/home/ユーザ名/www/cron.shだけにして属性を700にして

#!/bin/sh

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin

FETCH_URL=http://www.ユーザ名.com/cron/fetch_items

FETCH_ID=xxxxxxxx

WORK_DIR=/tmp

cd $WORK_DIR

wget -q $FETCH_URL/$FETCH_ID > /dev/null 2>&1

rm $FETCH_ID

に書き換えてみましたが

rm: xxxxxxxx: No such file or directoryなんて

言われて怒られちゃいました。。。

2010/03/24 20:37:08
id:ko8820 No.2

ko8820回答回数1221ベストアンサー獲得回数692010/03/24 08:34:17

ポイント20pt

http://www.blogwapi.com/blog/0504skrcron.html

このあたりが原因かも

id:dreamworks

回答ありがとうございます。

レンタルしたのは先週なのでOSのバージョンアップは大丈夫として

カレントディレクトリ変更も試してみたのですが

うまく動かずでした。

2010/03/24 20:36:50
id:snufkinski No.3

Snufkinski回答回数41ベストアンサー獲得回数112010/03/24 12:32:31

ポイント20pt

さくらは専用サーバの利用経験しかないのでコンパネがどういう画面がわかりませんが、ご参考までに気になった点を。


◆専用サーバでなければ、"cd"でサーバ内の自由な移動は禁じられていることが一般的だと思います。

(理由はお解かりになりますよね?)


◆あと、"/usr/local/bin/sh" はいらないと思います。

これも、共用サーバの場合には、許されるコマンド群には予めパスが通してあるはずですし、一般的でないところに置いてあるかもしれません。


◆あと他には、1.さんがご指摘のように、パーミッションは"700"または"600"など


参考までに、本来のクーロンの設定方法は、どこに置かれる設定ファイルかにより記述方法が異なります。

1) /etc/cron.d/に置かれるものでしたら、

"分 時 日 月 曜日 ユーザ コマンド"という形式で"実行時間 実行ユーザ 実行コマンド"を指定します。

2) /etc/cron.daily/、/etc/cron.hourly/ 等に置かれるものでしたら、

そのまま、コマンドや"#!/bin/sh"などに始まるスクリプト等を記述します。

つまり、コンパネで時刻指定が別途できるようになっているのであれば、直接、コマンド名またはスクリプトファイル名の指定だけをすればいい仕様になっているかと思われます。

別途時刻指定の欄がなければ、"実行時間 実行コマンド"で指定するのだと思います。

(共有の場合、ユーザー名は自由に"root"とかは指定できないはずなので、契約ユーザ名がデフォルトで使用されると思うからです。)


cron の設定ガイド


と、ここまで書いて1.さんへの返信を見たのですが、

クーロン自体は動いているようなので、パス指定や"cd"を使わないスクリプトに変更されてみてはいかがでしょうか?

id:dreamworks

回答ありがとうございます。

共用サーバだとcdでの移動はダメですか。

>コマンドにはあらかじめパスが通してある

もっと簡略化して書けばいいでしょうかね?

2010/03/24 20:41:18
id:kick_m No.4

kick_m回答回数1372ベストアンサー獲得回数542010/03/24 15:56:23

ポイント20pt

wgetのオプションがまちがってますね。

ふつうに動かすと、ローカルにwww.ユーザー名.com以下のディレクトリ構造を保ったまま保存されます。ホスト名のディレクトリをはぶく場合は、-nH ディレクトリを作らない場合は、-ndを指定します。

id:dreamworks

回答ありがとうございます。

オプションが間違ってましたか^^;

色々いじってたらエラーは吐かなくなったんですが

cron.sh自体が動いていないような感じです。

あとさくらレンタルサーバーは1時間に1回しかコマンド実行できない??

かもしれないです。

2010/03/24 20:48:53
id:snufkinski No.5

Snufkinski回答回数41ベストアンサー獲得回数112010/03/25 11:05:41ここでベストアンサー

ポイント20pt

>rm: xxxxxxxx: No such file or directoryなんて

>言われて怒られちゃいました。。。

であれば、"cron.sh"内は走ってるんじゃないでしょうか?

共有サーバはセキュリティ上やリソースの関係など様々な都合から制限を設けてあることが一般的です。

例えば、だれもが設定する朝方4:30頃のクーロン実行を負荷軽減のために少しずつずらされたりして

一度に50ユーザとかがバッチプログラムを走らせるなどの負荷を分散したりということもあります。


クーロンが走っているのか心配であれば、

先ずは試しに、cron.shを以下のようにして確認されてみてはいかがでしょうか?

◆ファイルを作成して確認

#!/bin/sh
echo "Hi, I'm running" > /home/[ユーザ名]/www/test_cron.txt

◆メールを送って確認

#!/bin/sh
mail -s crontest [メールアドレス]

◆wget が機能しているかの確認(自身のユーザ領域にGet)

#!/bin/sh
wget http://www.yahoo.com/ -O /home/[ユーザ名]/www/test_wget.html

あと、

>WORK_DIR=/tmp

>cd $WORK_DIR

推測で恐縮ですが・・・これは許されていないと思います。

一般にユーザホームディレクトリより上には行けないと思いますし、アクセスもできないと思います。

(ご質問者さんの場合、/home/ユーザ配下以外)

それを許せば、他のユーザさんの一時ファイルにもアクセスできちゃいますし、

それ以外にもいろいろできちゃいますよね?

id:dreamworks

回答ありがとうございます。

メールは大丈夫なようです。

WORKディレクトリについては

もう一度考えてみます。

バッチがずれるのは了解しました!

2010/03/26 22:56:58
  • id:GreenStar
    サーバーコンパネは
    /home/ユーザ名/www/cron.sh
    だけね!
  • id:GreenStar
    >rm: xxxxxxxx: No such file or directoryなんて
    >言われて怒られちゃいました。。。

    どうして入れてあるのか疑問だったから残しておいたんだけど!
    単純に xxxxxxxx がないからじゃないの? その行って要るの?
  • id:dreamworks
    dreamworks 2010/03/26 22:58:22
    みなさんありがとうございました。
    色々お騒がせしました。
    いったんクローズします。

    自分が勉強不足だということが
    よく解りました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません