teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

曖昧な文言を修正

2016/07/06 06:53

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

answer CHANGED
@@ -73,7 +73,7 @@
73
73
  このうち`/bash`で終わるパスが、`bash`コマンドの実体となるファイルです。
74
74
  (上の例の場合、`/bin/bash`です)
75
75
 
76
- cronの設定に、`bash`の実体ファイルをフルパスで追記してください。
76
+ cronの設定に、"./sample.sh" の前に`bash`の実体ファイルをフルパスで追記してください。
77
77
  例えば、以下のような感じです。
78
78
  ##### Before
79
79
  ```
@@ -86,6 +86,7 @@
86
86
  ```
87
87
 
88
88
  これで、シェルが正しく実行されるか、あるいはエラーメッセージがどのように変わるか確認してみてください。
89
+
89
90
  ---
90
91
  ちなみに、当ご質問とは無関係ですが、 /var/log/syslog に
91
92
  ```

1

回答を追記

2016/07/06 06:53

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

answer CHANGED
@@ -50,4 +50,47 @@
50
50
  or by the shell specified in the SHELL variable of the cronfile.
51
51
 
52
52
  そのため、ファイルの末尾に改行がないと、最終行に記述した設定が無視されてしまいます。
53
- `crontab -e`で開いたファイルの末尾に1つ、空行を追加して、様子を見てみてください。
53
+ `crontab -e`で開いたファイルの末尾に1つ、空行を追加して、様子を見てみてください。
54
+
55
+ # 2016/07/06 追記
56
+ 他の回答者様へのコメントに記載したエラーメッセージが
57
+ > /bin/sh: 1: Syntax error: word unexpected (expecting ")")
58
+
59
+ となっていることから、cronで`/bin/sh`を実行すると、`bash`とはべつのシェル(おそらく`dash`?)が起動していると思われます。
60
+ [https://ja.wikipedia.org/wiki/Debian_Almquist_shell](https://ja.wikipedia.org/wiki/Debian_Almquist_shell)
61
+
62
+ 上の予想が正しければ、`bash`を使用して sample.sh を起動するよう、cronに指示してやればうまく動くはずです。
63
+
64
+ まず、以下のコマンドを実行してください。
65
+ ```sh
66
+ whereis bash
67
+ ```
68
+
69
+ 環境によって異なりますが、以下のようにいくつかのパスが表示されるはずです。
70
+ ```
71
+ bash: /bin/bash /usr/share/man/man1/bash.1.gz
72
+ ```
73
+ このうち`/bash`で終わるパスが、`bash`コマンドの実体となるファイルです。
74
+ (上の例の場合、`/bin/bash`です)
75
+
76
+ cronの設定に、`bash`の実体ファイルをフルパスで追記してください。
77
+ 例えば、以下のような感じです。
78
+ ##### Before
79
+ ```
80
+ * * * * * cd /home/hoge/Desktop/hoge/sample; ./sample.sh
81
+ ```
82
+
83
+ ##### After
84
+ ```
85
+ * * * * * cd /home/hoge/Desktop/hoge/sample; /bin/bash ./sample.sh
86
+ ```
87
+
88
+ これで、シェルが正しく実行されるか、あるいはエラーメッセージがどのように変わるか確認してみてください。
89
+ ---
90
+ ちなみに、当ご質問とは無関係ですが、 /var/log/syslog に
91
+ ```
92
+ Jul 4 15:47:01 hoge cron[629]: (*system*) INSECURE MODE (group/other writable) (/etc/crontab)
93
+ ```
94
+ と出力されていることから、`/etc/crontab`ファイルのグループがおかしいためにこの設定ファイルが無視されています。
95
+
96
+ これはこれで、別途、調査する必要があると思います。