- PR -

cron.hourly

1
投稿者投稿内容
ネ音
会議室デビュー日: 2004/12/10
投稿数: 17
投稿日時: 2005-06-10 11:56
こんにちは

RedHatELを使用しております。

/etc/cron.hourly/下に置きましたスクリプトが実行しないのでお教えください。

@source /etc/cron.hourly/test.shをターミナルで実行するとスクリプトが走りました。

A/etc/crontabを元のまま
01 * * * * root run-parts /etc/cron.hourly
としたのですが、01分になってもスクリプトが実行されません。

なお、ls -al /etc/cron.hourly/test.shで、権限は755、グループ・ユーザ:root
になっています。
また、ps ax の結果で、crondのSTATはSになっているし、crontabに追記しているスクリプトは正常に実行されているので機能していると考えています。

何がいけないのでしょうか?ご教授お願いいたします。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-06-10 12:09
こんにちは。

1つツッコミです。
引用:
source /etc/cron.hourly/test.shをターミナルで実行するとスクリプトが走りました。


run-parts ( /usr/bin/run-parts ) は、source を使ってプログラム実行するわけではないので、それでは確認として不十分ですよ。
単純に /etc/cron.hourly/test/sh とコマンド実行して動作するかどうか、ですね。
hohojp
常連さん
会議室デビュー日: 2005/02/15
投稿数: 31
投稿日時: 2005-06-10 12:20
LOGはどうでしょうか?

CRONのデーモンが、実行しているのに反映されていないのか、
実行すらされていないのか、どちらでしょうか?

まずは、ログを!
ネ音
会議室デビュー日: 2004/12/10
投稿数: 17
投稿日時: 2005-06-10 14:32
angelさん、hohojpさん、ありがとうございます。

hohojpさんご指摘のログに関しては、CMD (run-parts /etc/cron.hourly)が存在していました。
angelさんご指摘のrun-pats /etc/cron.hourly/test.sh とコマンド実行したのですが、実行されませんでした。その内容をみると、「: cannot execute binary file」があったので、試しにtest.shの#!/bin/bashの上の行に日本語のコメントを記述を削除してみました。そして、再度、run-pats /etc/cron.hourly/test.sh とコマンド実行した所、スクリプトが走りました。 #!/bin/bashの上の行に半角のコメントを記述した時も走りました。でも1文字でも日本語のコメントがあると走りません。

この対策で様子を見た(crontabの時刻を待って見た)所、所定の時刻に正常にスクリプトが走りました。

crontabの追加(source)で指定しているスクリプトは#!/bin/bashの上の行に日本語のコメントを記述していても走るのに、run-patsではダメとは不思議ですね。

この解釈でいいんですよね。

[ メッセージ編集済み 編集者: ネ音 編集日時 2005-06-10 14:34 ]
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-06-10 14:46
引用:

angelさんご指摘のrun-pats /etc/cron.hourly/test.sh とコマンド実行したのですが、


run-partsは、ディレクトリを引数として指定するコマンドです。
実行の仕方自体間違えているし、指摘内容を勘違いしてます。

引用:

試しにtest.shの#!/bin/bashの上の行に日本語のコメントを記述を削除してみました。そして、再度、run-pats /etc/cron.hourly/test.sh とコマンド実行した所、スクリプトが走りました。 #!/bin/bashの上の行に半角のコメントを記述した時も走りました。でも1文字でも日本語のコメントがあると走りません。


bashのシェルスクリプトなのに、先頭行に#!で始まる行が
無かったから、残りの部分を特定のインタプリタへ引き渡すことが出来ず、
かつ2行目以降が実行形式バイナリファイルでもなかったから、
実行されなかっただけです。

sourceはbashの内部コマンドであり、現在ログインシェルとして実行している
bashのシェル環境内で、引数として指定されたスクリプトを実行する、
という役割を持っているから、(現在のログインシェルとして使ってる)bashに
スクリプトが渡されて正常に実行された、ってだけです。

シェルスクリプトの1行目の意味と大切さを知って、
コメントの書き方を見直す、ってのが答えです。

[ メッセージ編集済み 編集者: Mattun 編集日時 2005-06-10 14:50 ]
はゆる
ぬし
会議室デビュー日: 2004/02/16
投稿数: 1008
お住まい・勤務地: 首都圏をウロウロと
投稿日時: 2005-06-10 14:47
こんにちは。

シェルの1行目は、「#!」 で始まる行で、シェルを指定するのがお約束になっています。
そうでない場合は、ログインシェルが使われます。

# 被りました (^^;
_________________
夢から醒めた夢
★「2005年夏のOFF」やります★ 企画参加希望へのご投稿お待ちしています!


[ メッセージ編集済み 編集者: はゆる 編集日時 2005-06-10 14:49 ]
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-06-10 15:13
こんにちは。

Mattunさんのご指摘が正しいですね。

シェルスクリプトは“#!”で始めるというお約束については、execve(2)( Linux OS がプログラム実行をするときのシステムコール ) にもありますね。
※応用すれば、#!/bin/cat で始まるスクリプトも作れますよ…活躍する場面は無いでしょうけど。

追記:スクリプトも含めて、プログラムの基本は Hello, world! ですよね。と言ってみるテスト。
コード:
#!/bin/grep -ve^#

# スクリプト入門編
Hello, world!



[ メッセージ編集済み 編集者: angel 編集日時 2005-06-10 15:52 ]
ネ音
会議室デビュー日: 2004/12/10
投稿数: 17
投稿日時: 2005-06-10 16:01
反省し、感謝し、糧と致します。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)