何卒よろしくお願いいたします。
###前提・実現したいこと
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」にしたところうまく行くのですが、ディレクトリ名「サンプル」ではうまくいきません。 ディレクトリ名「サンプル」のままで実行するにはどうしたらいいでしょうか? 何かとよろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答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
総合スコア1864
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
総合スコア6621
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
cron実行してエラーメッセージなどがあればメールに送られます。
ターミナルで実行してる時はターミナルに表示されますが
cronの時は表示先がないのでそうなってます。
新着メールがあります的なメッセージがターミナルに
出てたりしませんか? メールの読み方は…
http://www.uetyi.com/server-const/command/entry-166.html
thincaさんがコメントで書かれているようにリダイレクトされて
いれば(そしてもしエラーメッセージが出ていれば)
メールは出されずにリダイレクト先のファイルに出力されます。
投稿2016/06/29 08:18
総合スコア7468
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

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総合スコア4791
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
エラーが発生していれば、crontab -e を実行したユーザー宛にメールが来ているはずですので、確認してください。
「手動で実行すればうまく行くのに、cronに登録するとエラーになる」の原因は、カレントディレクトリの違いか、環境変数の違いです。
手動で実行してもうまく行かないのであれば、それ以前の問題ですが。
投稿2016/06/27 07:58
総合スコア86295
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/29 07:27
2016/06/29 08:02
2016/07/04 04:55
2016/07/04 06:22
2016/07/06 05:45