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

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

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

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

6回答

8349閲覧

cronの設定についてどなたか教えていただけませんか

dlrowolleh

総合スコア120

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

1グッド

2クリップ

投稿2016/06/27 06:53

編集2022/01/12 10:55

何卒よろしくお願いいたします。
###前提・実現したいこと
Linuxのパソコンを使っています。
自作したshell scriptを毎回決まった時間に自動で動作させたいと思っています。

/home/hoge/Desktop/hoge/sample/内にある、
sample.shを毎週月曜日と金曜日の14時56分に自動的に実行させたいです。

###発生している問題・エラーメッセージ

エラーメッセージの見かたも分かっておりません。 時間になって待機していても、実行されていませんでした。

###該当のソースコード

56 14 * * 1,5 /home/hoge/Desktop/hoge/sample/sample.sh と crontab -e と入力した際の末尾に追加しています。

###試したこと
crontab -e

末尾に
56 14 * * 1,5 /home/hoge/Desktop/hoge/sample/sample.sh
と追加しています。
あとは時間が過ぎた時、実行されていたかどうかを確認しました。
きちんと実行できていたら、
/home/hoge/Desktop/hoge/sample/hoge1/
ディレクトリ内に
hoge.txtが作成されているはずだったのですが、
/home/hoge/Desktop/hoge/sample/hoge1/
ディレクトリを見に行っても
空のままでした。

###補足情報(言語/FW/ツール等のバージョンなど)
環境はubuntu15.10です。
GNU bash, バージョン 4.3.42(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.

###追記・補足(回答いただいたことで試したこと)

cd /home/hoge/Desktop/サンプル/sample; ./sample.sh ```と手入力で実行した場合は問題なく実行でき動作しました。 ###crontab -eの内容
          • cd /home/hoge/Deskto/サンプル/sample; ./sample.sh
###上記crontab実行時のエラーメールの内容

/bin/sh: 1: Syntax error: word unexpected (expecting ")")

###sample.shの内容

1 #!/bin/bash -x
2 set -x
3 wget -nd -O /home/hoge/Desktop/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://※※.com

###* * * * * /home/hoge/Desktop/hoge/sample/sample.shの時のcronの実行ログと思われる/var/log/syslogの内容

Jul 4 15:47:01 hoge cron[629]: (system) INSECURE MODE (group/other writable) (/etc/crontab)
Jul 4 15:47:01 hoge cron[629]: (hoge) RELOAD (crontabs/hoge)

重要である部分が分散してしまい、大変読みづらい状況になっておりましたことをお詫びします。 ###追記(試したこと7/11) ###crontab の内容
          • cd /home/h28-sotuken/Desktop/サンプル/sample; ./sample.sh
###エラーメッセージのmail

/bin/sh: 1: cd: can't cd to /home/hoge/Desktop/文字化け

###手入力 単体で

cd /home/h28-sotuken/Desktop/サンプル/sample; ./sample.sh

は動作します。 sample.shの内容

1 #!/bin/bash -x
2 set -x
3 wget -nd -l1 -r -O /home/hoge/Desktop/サンプル/sample/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://www.※※.com

###文字化けしていたので「サンプル」を「A」にしました。 ###Before
          • cd /home/h28-sotuken/Desktop/サンプル/sample; ./sample.sh
###After
          • cd /home/h28-sotuken/Desktop/A/sample; ./sample.sh
###手入力

cd /home/h28-sotuken/Desktop/A/sample; ./sample.sh

は動作します。 ###sample.shの内容

1 #!/bin/bash -x
2 set -x
3 wget -nd -l1 -r -O /home/hoge/Desktop/A/sample/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://www.※※.com

でした。 文字化けしていたのでディレクトリ名「サンプル」を「A」にしたところうまく行くのですが、ディレクトリ名「サンプル」ではうまくいきません。 ディレクトリ名「サンプル」のままで実行するにはどうしたらいいでしょうか? 何かとよろしくお願いします。
mondaminZ👍を押しています

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

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

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

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

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

guest

回答6

0

スクリプトは実行可能になっているでしょうか?

cron の実行部分に /bin/bash /home/hoge/Desktop/hoge/sample/sample.sh と書いてみるか、スクリプトの先頭行に #!/bin/bash と書いて実行フラグを追加する (chmod +x sample.sh) かを試してみてください。

解決しない場合は、もっと単純な例 (touch /home/hoge/foo.txt など) を試してみて、cron 自体が動いているかの確認をしてみると良いかもしれません。

投稿2016/06/27 07:03

thinca

総合スコア1864

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

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

dlrowolleh

2016/06/29 07:27

thinca様 はじめまして。 ご回答いただきありがとうございます。 ただ、私はリナックス初心者でまだまだ経験が浅く 分からない部分が多くありますので、 ひとつずつコメントします。 何卒ご教授お願いいたします。 まず、 スクリプトは実行可能になっているでしょうか? ですが、 スクリプトの先頭に #!/bin/bash と書いています。 また、chmod +x sample.sh も実行していて、 ./sample.sh と実行した際には ./sample.sh の動作ができています。 そして、 解決しない場合は、もっと単純な例 (touch /home/hoge/foo.txt など) を試してみて、cron 自体が動いているかの確認をしてみると良いかもしれません。 とのアドバイスも 試してみました。 foo.txtを /home/hoge/ に作り cron -e と入力して 行の最後に 50 14 * * * /home/hoge/foo.txt と入力して14時50分を過ぎてから ls -l /home/hoge/foo.txt と入力したところ、 foo.txtの時間は14:50になっていました。 そして、 50 14 * * * /home/hoge/foo.txt を 55 14 * * * /home/hoge/foo.txt に変更して、 14時55分を過ぎてから ls -l /home/hoge/foo.txt と入力したところ、 foo.txtの時間は14:55になっていました。 これは cronが動作しているということでいいでしょうか? 05 15 * * * /home/hoge/Desktop/hoge/sample/sample.sh と登録しているのですが、 やはりうまくいきません。 cron の実行部分に /bin/bash /home/hoge/Desktop/hoge/sample/sample.sh と書いてみるかとのアドバイスを頂いておりますが、 05 15 * * * /home/hoge/Desktop/hoge/sample/sample.sh を 05 15 * * * /bin/bash /home/hoge/Desktop/hoge/sample/sample.sh にするということで合っていますか? 実行部分というのが未だによく分かっていなかったため、 これはまだ実行しておりません。 実行部分というのは 05 15 * * * 以降の部分ということでしょうか? 長文大変失礼しました。 何卒よろしくお願いします。
thinca

2016/06/29 08:02

> 05 15 * * * /bin/bash /home/hoge/Desktop/hoge/sample/sample.sh > にするということで合っていますか? あっています。が、実行フラグがついているのであれば恐らくここは問題ではなさそうです。 otn さんの言うように、実行環境の違いでうまく動いていないのかもしれません。 ややこしい手順は置いておいてとりあえずエラーを知りたいのであれば、 05 15 * * * /bin/bash /home/hoge/Desktop/hoge/sample/sample.sh > /home/hoge/error.txt 2>&1 とする方法もあります。コマンドの出力がファイルに保存されるので、何かエラーメッセージが出ていれば確認できるかと思います。
dlrowolleh

2016/07/04 04:55

ご回答いただきましてありがとうございます 早速 crontab -e で * * * * * /bin/bash /home/hoge/Desktop/hoge/sample/sample.sh > /home/hoge/error.txt 2>&1 としてみましたが、 /home/hoge/ を見に行ってもerror.txtは 作成されていませんでした。 また、 takasima20様に返事をさせていただきましたように mailコマンドが入っていなかったため、 mailコマンドをインストールしたところ、 1分おきにメールが届くようになりました。 メールの内容は /bin/sh: 1: Syntax error: word unexpected (expecting ")") でした。 1行めは #!/bin/bash になっています。 ./saple.shと実行した時はうまく動作したのですが… また、* * * * * /bin/bash /home/hoge/Desktop/hoge/sample/sample.sh > /home/hoge/error.txt 2>&1 で error.txt が作成されない原因は何が考えられるでしょうか? お手数ですがよろしくお願いいたします。
thinca

2016/07/04 06:22

ファイルが作成されない理由として考えられるのは、cron の実行時のユーザにそのディレクトリに対する書き込み権限がない、などでしょうか。ただ、crontab -e でやっているので、hoge ユーザに書き込み権限があれば問題ないはずです。他の理由についてはちょっとパットは思い当たりません…。 エラーについては、他の方もおっしゃっている通りスクリプトの中身に問題がある可能性が高そうです。otn さんのアドバイスしている通り、set -x を試してみると良さそうです。
dlrowolleh

2016/07/06 05:45

返信頂きありがとうございます。 現在、cronには * * * * * cd /home/hoge/Desktop/hoge/sample; ./sample.shと登録しています。 スクリプトも変更し 1 #!/bin/bash -x 2 set -x 3 wget -nd -O /home/hoge/Desktop/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://※※.com となっていますが 1分おきにmailが届き /bin/sh: 1: Syntax error: word unexpected (expecting ")") と書いてあります。 手動での実行はでき、きちんと動作するのですが、cronに登録するとエラーが返ってきます。 原因は何が考えられるでしょうか? 何卒よろしくお願いいたします。
guest

0

cron -e で次の様になっている箇所を

/home/hoge/Desktop/hoge/sample/sample.sh

次のように変更してみてください。

(cd /home/hoge/Desktop/hoge/sample; ./sample.sh)

恐らく、sample.shの内容が、カレントパスが /home/hoge/Desktop/hoge/sample でないといけないような気がします。

単体実行したのと出来る限り同じ環境で動かすようにしましょう。

投稿2016/07/01 07:23

moonphase

総合スコア6621

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

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

dlrowolleh

2016/07/06 05:01

moonphase様 はじめまして。 早速試してみました。 単体で cd /home/hoge/Desktop/hoge/sample; ./sample.sh とした時はsample.shはうまく動作しましたが cd /home/hoge/Desktop/hoge/sample; ./sample.sh と登録した場合には 実行されていないようでした。 mailが届いていて、 内容は /bin/sh: 1: Syntax error: word unexpected (expecting ")") でした。 sample.sh の1行めは #!/bin/bash です。 手動で実行できるのに、cronに登録すると実行できない原因は何が考えれられるでしょうか? 何卒よろしくお願いいたします。
moonphase

2016/07/06 05:07

シェルをデバッグモードにしてみましょう。 sample.shの一行目を #!/bin/bash から #!/bin/bash -x に変更してみてください。
dlrowolleh

2016/07/06 05:31

返信いただきありがとうございます。 早速試してみました。 sample.shの1行めを #!/bin/bash -x にして、 cd /home/hoge/Desktop/hoge/sample; ./sample.sh と入力したところ、 sample.shは実行でき、動作しました。 しかし、cronに登録 * * * * * cd /home/hoge/Desktop/hoge/sample; ./sample.sh すると mailが届いていて、 内容は /bin/sh: 1: Syntax error: word unexpected (expecting ")") でした。 sample.sh の内容についてですが、 https://teratail.com/questions/37950 を参照していただけたら幸いです。 ページでは wget -nd -O /home/yosida/Desktop/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://※※.com としていますが、cronに登録しているのは wget -nd -O /home/hoge/Desktop/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://※※.com です。 また、sample.shの内容ですが、 1 #!/bin/bash -x 2 set -x 3 wget -nd -O /home/hoge/Desktop/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://※※.com です。 お手数ですが、何かとよろしくお願いします。
moonphase

2016/07/06 06:31

2行目でset -xすると、一行目で指定した xが無効になりますね。 デバッグモードはすぐ抜けているはいいとして、 cronはLANG環境変数が設定されていないはずなので、スクリプト内で日本語を利用する場合はwgetする前に export LANG=ja_JP.UTF-8 を記載するか crontabで次のようにしてみてください。 56 14 * * 1,5 export LANG=ja_JP.UTF-8; /home/hoge/Desktop/hoge/sample/sample.sh
dlrowolleh

2016/07/08 05:29

返信いただきありがとうございます。 >cronはLANG環境変数が設定されていないはずなので、スクリプト内で日本語を利用する場合はwgetする前に >export LANG=ja_JP.UTF-8 >を記載する ということで、皆さんが環境変数とおっしゃっていた意味がなんとなく分かった気がします。 大変ご迷惑をお掛けしました。 * * * * * export LANG=ja_JP.UTF-8; cd /home/hoge/Desktop/サンプル/sample; ./sample.sh とcronに登録しましたが、 やはりメールが届きます。 内容は以前と変わらず、 /bin/sh: 1: Syntax error: word unexpected (expecting ")") でした。 今まで /home/hoge/Desktop/hoge/sample/sample.sh と質問していましたが、 /home/hoge/Desktop/hoge/サンプル/sample.sh の間違いでした。 現在は * * * * * export LANG=ja_JP.UTF-8; cd /home/hoge/Desktop/サンプル/sample; ./sample.sh と登録してあります。 この場合にも環境変数が問題になっているということでしょうか? cd /home/hoge/Desktop/サンプル/sample; ./sample.sh と入力した場合はきちんと動作。実行します。 また、分散していて大変読みづらくなってしまっていたため質問に 追記・補足をさせていただきました。大変申し訳ありませんでした。 何卒よろしくお願いいたします。
moonphase

2016/07/11 09:14

出ているエラーは日本語のパス部分が適切に処理されていない気がします。 ターミナルを開いて env | grep LANG とした結果はどうなっていますか? 日本語を扱う場合は、LANG環境変数を適切に設定する必要があります。 crontabのファイル内も日本語を使うことはやめておいたほうが良いです。 パス内の「サンプル」を英語「Sample」に変更できませんか? せめて sample.sh 内で cd /home/hoge/Desktop/サンプル/sample しましょう。 #日本語を使わないほうがいいというのは、日本語が表示されないコンソールからでも、保守作業に支障をきたさぬ為、、、というだけですので、人により考えは異なるかもしれません
dlrowolleh

2016/07/13 06:01

返信いただきありがとうございます。 env | grep LANG の結果ですが LANG=ja_JP.UTF-8 GDM_LANG=ja LANGUAGE=ja_JP.UTF-8 でした。 sample.shの内容は 1 #!/bin/bash -x 2 set -x 3 export LANG=ja_JP.UTF-8; wget -nd -O /home/hoge/Desktop/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://※※.com になっています。 /home/hoge/Desktop/html/1_吉田/ の吉田を yosidaなどに変えて /home/hoge/Desktop/html/1_yosida/ などにしたほうがいいでしょうか?
guest

0

cron実行してエラーメッセージなどがあればメールに送られます。
ターミナルで実行してる時はターミナルに表示されますが
cronの時は表示先がないのでそうなってます。

新着メールがあります的なメッセージがターミナルに
出てたりしませんか? メールの読み方は…
http://www.uetyi.com/server-const/command/entry-166.html

thincaさんがコメントで書かれているようにリダイレクトされて
いれば(そしてもしエラーメッセージが出ていれば)
メールは出されずにリダイレクト先のファイルに出力されます。

投稿2016/06/29 08:18

takasima20

総合スコア7458

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

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

dlrowolleh

2016/07/01 07:13

takasima20様 素早く ご回答いただきましてありがとうございます。 使っていたパソコンにmailコマンドが入っていませんでした。 早速インストールして、 KiyoshiMotoki様 のアドバイスを参考にして、 1分ごとに実行してくれるようにしたら、メールが届くようになりました。 >thincaさんがコメントで書かれているようにリダイレクトされて >いれば(そしてもしエラーメッセージが出ていれば) >メールは出されずにリダイレクト先のファイルに出力されます。 とのことですが、 error.txtはどこにも見当たらず、メールが一分おきに届くようになりました。 そして、実行したいsample.shは未だ実行されていません。 どこに問題があるのかがまだ良くわかりません。 お手数ですが、何卒ご教授のほどよろしくお願いいたします。
takasima20

2016/07/01 10:26

とりあえず、cronに設定したものが実行されているのは確認できたってことですね。 あとは sample.sh の内容を見てみないとなんともいえないかなあ。 差支えなければ、質問に追記してみてください。
dlrowolleh

2016/07/04 05:57

ご回答いただきありがとうございます。 sample.sh の内容についてですが、 https://teratail.com/questions/37950 を参照していただけたら幸いです。 ページでは wget -nd -O /home/yosida/Desktop/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://※※.com としていますが、cronに登録しているのは wget -nd -O /home/hoge/Desktop/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://※※.com です。 また、sample.shの内容ですが、 1 #!/bin/bash 2 set -x 3 wget -nd -O /home/hoge/Desktop/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://※※.com です。 お手数ですが、何かとよろしくお願いします。
takasima20

2016/07/04 09:43

もし以下のコマンド(手入力)がエラーになるなら /bin/sh ./sample.sh スクリプトの1行目がなんかおかしいかもです。
dlrowolleh

2016/07/06 05:10

返信いただきありがとうございます。 早速試してみました。 sample.shのあるディレクトリ /home/hoge/Desktop/hoge/sample で /bin/sh ./sample.sh と実行してみました。 sample.sh は実行でき、 実行した年月日時.htmlファイルが /home/hoge/Desktop/html/1_吉田 に作成されていました。 sample.sh の内容は 1 #!/bin/bash 2 set -x 3 wget -nd -O /home/hoge/Desktop/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://※※.com です。 手入力で実行できて、cronに登録して実行できない原因は何が考えられるでしょうか? 何卒よろしくお願いします。
takasima20

2016/07/06 08:47

moonphaseさんのセンが当たってる気がしてきました。 env コマンドを実行して LANG に何が設定してあるか確認します。 sample.sh の2行目あたりに export LANG=上記で調べた設定内容 を追記するといけるかも?
guest

0

以下を順に確認してみてください。

cronが起動しているか?

sh

1ps aux | grep cron | grep -v grep

と実行して、cronのプロセスが表示されるか確認してください。
(以下はCentOS上での結果です)

root 7388 0.0 0.0 106336 284 ? S 04:02 0:00 crond root 7389 0.0 0.0 8688 332 ? Ss 04:02 0:00 /bin/bash /usr/bin/run-parts /etc/cron.daily root 7872 0.0 0.0 8776 208 ? S 04:03 0:00 awk -v progname=/etc/cron.daily/logrotate progname {????? print progname ":\n"????? progname="";???? }???? { print; } root 21631 0.0 0.0 74808 748 ? Ss Apr15 0:23 crond

ログ

Ubuntuの場合、/var/log/syslogにcronの実行ログが出力されるようです。
月・金の14時56分に該当のシェルが実行されているか、およびエラーが出力されていないか確認してください。

金曜まで待つのが面倒なら、

56 14 * * 1,5 /home/hoge/Desktop/hoge/sample/sample.sh

* * * * * /home/hoge/Desktop/hoge/sample/sample.sh

に変更すれば1分ごとに実行してくれます。

設定ファイルの所有者・権限

cronは、設定したユーザー以外の者が書き込み・実行できる設定ファイルを無視します。
man cronの記述

The crontab files have to be regular files or symlinks to regular files, they must not be executable or writable by anyone else than the owner.

該当の設定ファイルの権限・所有者を確認してみてください。

crontabコマンドで編集した設定は、Ubuntuの場合/var/spool/cron/crontabsというパスの下に保存されるようです。
"hoge"ユーザーでcrontabコマンドを実行した場合、恐らく hoge という名前のファイルですので、

sh

1ls -al /var/spool/cron/crontabs

と実行し、hoge ファイルの所有者・権限が

-rw------- 1 hoge hoge 29 6月 29 16:44 2016 hoge

のように表示されれば、OKです(重要なのは"-rw-------" 部分と"hoge hoge"部分です)。

ファイルの末尾に改行がついているか?

cronは、設定ファイルの行頭から改行またはコメントの開始文字(%)までを1つの"設定"とみなします。
man 5 crontabの記述

The entire command portion of the line, up to a newline or % character, will be executed by /bin/sh

or by the shell specified in the SHELL variable of the cronfile.

そのため、ファイルの末尾に改行がないと、最終行に記述した設定が無視されてしまいます。
crontab -eで開いたファイルの末尾に1つ、空行を追加して、様子を見てみてください。

2016/07/06 追記

他の回答者様へのコメントに記載したエラーメッセージが

/bin/sh: 1: Syntax error: word unexpected (expecting ")")

となっていることから、cronで/bin/shを実行すると、bashとはべつのシェル(おそらくdash?)が起動していると思われます。
https://ja.wikipedia.org/wiki/Debian_Almquist_shell

上の予想が正しければ、bashを使用して sample.sh を起動するよう、cronに指示してやればうまく動くはずです。

まず、以下のコマンドを実行してください。

sh

1whereis bash

環境によって異なりますが、以下のようにいくつかのパスが表示されるはずです。

bash: /bin/bash /usr/share/man/man1/bash.1.gz

このうち/bashで終わるパスが、bashコマンドの実体となるファイルです。
(上の例の場合、/bin/bashです)

cronの設定に、"./sample.sh" の前にbashの実体ファイルをフルパスで追記してください。
例えば、以下のような感じです。

Before
* * * * * cd /home/hoge/Desktop/hoge/sample; ./sample.sh
After
* * * * * cd /home/hoge/Desktop/hoge/sample; /bin/bash ./sample.sh

これで、シェルが正しく実行されるか、あるいはエラーメッセージがどのように変わるか確認してみてください。


ちなみに、当ご質問とは無関係ですが、 /var/log/syslog に

Jul 4 15:47:01 hoge cron[629]: (*system*) INSECURE MODE (group/other writable) (/etc/crontab)

と出力されていることから、/etc/crontabファイルのグループがおかしいためにこの設定ファイルが無視されています。

これはこれで、別途、調査する必要があると思います。

投稿2016/06/29 07:59

編集2016/07/06 06:53
KiyoshiMotoki

総合スコア4791

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

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

dlrowolleh

2016/07/01 07:06

KiyoshiMotoki様 はじめまして。 素早くご回答いただきましてありがとうございます。 早速試してみました。 ###ファイルの末尾に改行がついているか? ありがとうございます。 知りませんでした。 末尾に改行をつけました。 そして、 mailコマンドが入っていなかったので mailコマンドをインストールして、 ``` * * * * * /home/hoge/Desktop/hoge/sample/sample.sh ``` と実行してみると、メールが届くようになりました。 ###cronが起動しているか? ``` ps aux | grep cron | grep -v grep ``` の結果ですが、 ``` root 591 0.0 0.1 34080 3064 ? Ss 13:41 0:00 /usr/sbin/cron -f ``` と表示されました。 cronは動作しているようです。 ###ログ ``` cd /var/log/ ls ``` と試してみました すると、ログらしきものがたくさんあり、どれが対象のものか分かりませんでした。 /var/log/の中身を綺麗にしてから、実行すれば、新しくログ作成され、見やすくなると思うので、 これらは消去しても大丈夫でしょうか? パソコンが起動できなくなるなどの不具合が発生することはありませんか? ###設定ファイルの所有者・権限 ``` ls -al /var/spool/cron/crontabs ``` だと ``` ls: ディレクトリ /var/spool/cron/crontabs を開くことが出来ません: 許可がありません ``` と表示されたので、 ``` sudo ls -al /var/spool/cron/crontabs ``` で実行してみました。 すると ``` -rw------- 1 hoge crontab 1339 7月 1 15:33 hoge ``` と表示されました。 >(重要なのは"-rw-------" 部分と"hoge hoge"部分です)。 とのことですが、 "hoge crontab"となっています。 これが問題になっていると思います。 どのように対処すればいいでしょうか? よろしくお願いいたします。 長文失礼致しました。 何卒よろしくお願いいたします。
KiyoshiMotoki

2016/07/01 07:18

返信ありがとうございます。 > どれが対象のものか分かりませんでした。 /var/log/syslog と申し上げたはずです。 grep コマンドなどで日時を絞り込めば、該当の設定の実行結果を突き止めることができるはずです。 > /var/log/の中身を綺麗にしてから、実行すれば、新しくログ作成され、見やすくなると思うので、 > これらは消去しても大丈夫でしょうか? このパスにはマシンの動作に関する重要なログが記録されています。 消去してもマシンに不具合が発生することはないと思いますが、何かあったときに調査できなくなりますので、不用意に消したりしないことをお勧めします。 > >(重要なのは"-rw-------" 部分と"hoge hoge"部分です)。 > とのことですが、 "hoge crontab"となっています。 > これが問題になっていると思います。 ユーザー(左側の"hoge")が全く別のものになっているのならともかく、グループ(右側の"hoge")が "crontab" になっているだけであれば、おそらく問題ないのではないかと思います。 私が該当ファイルの所有者が "hoge hoge" となるのを確認したのはCentOS(Ubuntuとは別のLinuxディストリビューション)でしたので、ディストリビューションの差異に過ぎないのではないかと予想します。 ですので、まずは /var/log/syslog の内容を確認してみてください。
dlrowolleh

2016/07/06 04:32

ご回答いただきましてありがとうございます。 vi /var/log/syslog で /var/log/syslogを見てみました。 どれが該当するものなのかよく分かりませんでしたが、 * * * * * /home/hoge/Desktop/hoge/sample/sample.sh の時のcronの実行ログらしきものがありました。 Jul 4 15:47:01 hoge cron[629]: (*system*) INSECURE MODE (group/other writable) (/etc/crontab) Jul 4 15:47:01 hoge cron[629]: (hoge) RELOAD (crontabs/hoge) でした。 実行エラーらしきものはこれで合っていますでしょうか? 度々申し訳ありませんがよろしくお願いします。
KiyoshiMotoki

2016/07/06 06:50

> Jul 4 15:47:01 hoge cron[629]: (*system*) INSECURE MODE (group/other writable) (/etc/crontab) > Jul 4 15:47:01 hoge cron[629]: (hoge) RELOAD (crontabs/hoge) でした。 > 実行エラーらしきものはこれで合っていますでしょうか? 「Jul 4 15:47:01 hoge cron[629]: (hoge) RELOAD (crontabs/hoge)」 と出力されていることから、crontabs/hoge ファイル自体は正常に読み込まれていると思われます。 考えられる原因と修正方法を回答欄に追記しましたので、確認願います。
KiyoshiMotoki

2016/07/06 07:28

あと、お手数ですが、本日 追記いただいた追加情報は質問欄にも転記していただけますか? 各回答者のコメント欄に情報が分散しているため、非常に読みづらい状況になっておりますので。
dlrowolleh

2016/07/08 04:49

返信していただきありがとうございます。 >あと、お手数ですが、本日 追記いただいた追加情報は質問欄にも転記していただけますか? >各回答者のコメント欄に情報が分散しているため、非常に読みづらい状況になっておりますので。 申し訳ありませんでした。 大変失礼致しました。 問題の解決ばかりに気を取られてしまい、皆様に読みやすくすることを忘れておりました。 追記・補足いたしましたので、何卒よろしくお願いいたします。
KiyoshiMotoki

2016/07/08 06:26

情報を取りまとめていただき、ありがとうございます。 私の回答欄の 「2016/07/06 追記」 という項に 追記いただいた情報から考えられる原因と対策を記載させていただいております。 お時間のあるときに、ご確認ください。
dlrowolleh

2016/07/11 06:17

丁寧に解説していただきありがとうございます bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz でした。 * * * * * cd /home/hoge/Desktop/サンプル/sample; /bin/bash ./sample.sh の結果ですが、 /bin/sh: 1: Syntax error: word unexpected (expecting ")") でした。 mailの Subjectが Cron <hoge@pc> cd /home/hoge/Desktop/文字化け/sample; /bin/bash ./sample.sh となっています。 >と出力されていることから、/etc/crontabファイルのグループがおかしいためにこの設定ファイルが無視されています。 >これはこれで、別途、調査する必要があると思います。 といただきました。 これはcron -eに登録していても、グループがおかしいから登録した内容は実行できないという意味で解釈しましたがあっていますか? どのように対処すればよいでしょうか? 何卒よろしくお願いします。
guest

0

エラーが発生していれば、crontab -e を実行したユーザー宛にメールが来ているはずですので、確認してください。
「手動で実行すればうまく行くのに、cronに登録するとエラーになる」の原因は、カレントディレクトリの違いか、環境変数の違いです。
手動で実行してもうまく行かないのであれば、それ以前の問題ですが。

投稿2016/06/27 07:58

otn

総合スコア84423

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

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

dlrowolleh

2016/06/29 07:07

otn様 はじめまして。 ご回答いただきありがとうございます。 ただ、私はリナックス初心者でまだまだ経験が浅く 分からない部分が多くありますので、 何卒ご教授お願いいたします。 まず、 お恥ずかしいのですが、cronのエラーかどうかということが分かりません。 cronのエラーが発生しているのかどうかはどのようにすれば分かるでしょうか? エラーが発生していれば、crontab -e を実行したユーザー宛にメールが来ているはずですので、 確認してください。 とご回答いただきましたので、エラーが発生したら、メールが届くということでしょうか? しかし、 cron -e で編集した際にはメールの登録作業のようなものはやっていません。 ただ cron -e と 端末に入力して、 いろいろと文字が出てきたところの最後の行に 56 14 * * 1,5 /home/hoge/Desktop/hoge/sample/sample.sh と入力しただけでした。 また、 「手動で実行すればうまく行くのに、cronに登録するとエラーになる」の原因は、カレントディレクトリの違いか、環境変数の違いです。 手動で実行してもうまく行かないのであれば、それ以前の問題ですが。 とご回答いただきました。 sample.shを 手動で実行しようと ./sample.sh とした時はsample.shはきちんと実行されています。 これはcronのエラーということでしょうか? 何卒よろしくお願いします。
otn

2016/06/29 14:02

> エラーが発生したら、メールが届くということでしょうか? 同じ事は何度も書きませんので、回答を読み直してください。書いた通りです。 メールの設定が出来ているか確認してください。 echo TEST | mail ユーザ名 で、自分にメールを送り、 mail で、メールが読めるか確認してください。Cron Daemonからのメールがなければ、エラーがなかったか、そもそも起動されていないかです。 > とした時はsample.shはきちんと実行されています。 > これはcronのエラーということでしょうか? これも、回答に書いたのですが?? 「カレントディレクトリ」とか「環境変数」の意味自体がわからないのであれば、あなたはまだ自分でスクリプトを書くレベルに達していないと言うことです。
dlrowolleh

2016/07/01 07:44

otn様 素早くアドバイスいただきましてありがとうございます。 mailコマンドが入っていなかったため、インストールしました。 そして echo TEST | mail ユーザ名 を試してみたところ、 きちんと自分宛にTESTと書いてあるメールが届いていました。 そして、 1分おきに実行するようにcrontabを設定するようにしたところ、 1分おきにメールが届くようになりました。 メールの本文には /bin/sh: 1: Syntax error: word unexpected (expecting ")") と書いてあります。 1行目に構文エラーとありますが、 これは、実行しようとしたスクリプトの1行目の構文がおかしいということであっていますか? 実行したいsample.shの1行目は #!/bin/bash となっています。 やはり、手動で ./sample.sh と打てば実行できます。 cronに登録するスクリプトの1行目は #!/bin/bash ではいけないのでしょうか? >カレントディレクトリの違いか、環境変数の違いです。 >「カレントディレクトリ」とか「環境変数」の意味自体がわからないのであれば、あなたはまだ自分 >でスクリプトを書くレベルに達していないと言うことです。 とアドバイスいただきましたが、 カレントディレクトリ、環境変数の意味は分かるのですが、 どう間違っているのかが、分かりません。 カレントディレクトリ、環境変数の違いとのことですが、 どのように間違っていると考えられるか アドバイスいただけませんでしょうか。 何卒よろしくお願いいたします。
otn

2016/07/01 14:13

大分、絞れてきましたね。 sample.sh の1行目が #!/bin/bash となっているのに、出ているメッセージは、 /bin/sh: 1: Syntax error: word unexpected (expecting ")") と、/bin/sh が出しています。 ということは、sample.sh自体のエラーで無く、sample.sh から呼び出しているコマンドの何かがおかしいことになります。 sample.shの#!/bin/bashの次に、set -x という行を入れてください。 そして、エラーメールの内容を見ると、sample.shのどこまで正常なのか分かると思います。
dlrowolleh

2016/07/06 05:37

ご回答いただきあがとうございます。 sample.sh の内容ですが、 https://teratail.com/questions/37950 を参照していただけたら幸いです。 ページでは wget -nd -O /home/yosida/Desktop/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://※※.com としていますが、cronに登録しているのは wget -nd -O /home/hoge/Desktop/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://※※.com です。 また、sample.shの内容ですが、 1 #!/bin/bash -x 2 set -x 3 wget -nd -O /home/hoge/Desktop/html/1_吉田/$(date '+%Y_%m_%d_%H:').html http://※※.com です。 これをcronに登録して見ましたが、 メールが届き /bin/sh: 1: Syntax error: word unexpected (expecting ")") となっていました。 cronには * * * * * cd /home/hoge/Desktop/hoge/sample; ./sample.sh と登録しています。 お手数ですが、何かとよろしくお願いします。
otn

2016/07/06 12:41

コメントにお書きの内容がすべて正しいとすると、あり得ないです。なので、どこかに勘違いがあるものと思います。 sample.shを、 #!/bin/bash echo OK の2行にするとどうでしょうか?どういうメールが来ますか?
dlrowolleh

2016/07/08 05:07

返信いただきありがとうございます。 試してみたところ /bin/sh: 1: Syntax error: word unexpected (expecting ")") とメールが届きました。 分散してしまい、読みにくくなっていたため、 質問を追記・補足いたしました。 大変申し訳ありませんでした。 何卒よろしくお願いいたします。
otn

2016/07/08 06:40

あなたが、「これが動かしているスクリプトファイルだ」と思っているものと、「実際に動いているスクリプトファイル」が異なると言うことだと思います。 コマンドラインで、 cd /home/hoge/Desktop/hoge/sample cat sample.sh と打つと、どう表示されますか?
dlrowolleh

2016/07/11 08:38

返信いただきありがとうございます。 >あなたが、「これが動かしているスクリプトファイルだ」と思っているものと、「実際に動いているスクリプトファイル」が異なると言うことだと思います。 端末で文字化けが発生していました。 これも 「これが動かしているスクリプトファイルだ」と思っているものと、「実際に動いているスクリプトファイル」が異なると言うこと になると思ったのですが、 合っていますか? また、文字化けの対策方法を教えていただけないでしょうか? 何卒よろしくお願いします。
otn

2016/07/12 14:44

上記コメントでお書きの状況が不明です。「なにをしたらどうなった」と書いてください。「こうならなかった」とか「うまくいかない」などの書き方ではさっぱり状況がつかめません。 それはさておき、 コマンドラインで、 cd /home/hoge/Desktop/hoge/sample cat sample.sh と打つと、どう表示されますか?
guest

0

crontabに登録されたシェルが、手起動だと正常に動作するにも関わらず、クーロンに登録されたシェルの動作が期待通りで無い場合、実行環境の違いが原因となる場合が多いです。
クーロンでenvやsetコマンドを実行して、ログインの場合と比較してみてはいかがでしょうか?

投稿2016/07/11 08:47

A.Ichi

総合スコア4070

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問