質問: 何卒よろしくお願いいたします。 ### 前提・実現したいこと 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 は動作します。 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 は動作します。 ### 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」にしたところうまく行くのですが、ディレクトリ名「サンプル」ではうまくいきません。 ディレクトリ名「サンプル」のままで実行するにはどうしたらいいでしょうか? 何かとよろしくお願いします。
回答: エラーが発生していれば、crontab -e を実行したユーザー宛にメールが来ているはずですので、確認してください。 「手動で実行すればうまく行くのに、cronに登録するとエラーになる」の原因は、カレントディレクトリの違いか、環境変数の違いです。 手動で実行してもうまく行かないのであれば、それ以前の問題ですが。