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

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

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

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

Q&A

解決済

4回答

1226閲覧

定期更新のcrontabについて教えてください。

po_tato

総合スコア97

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

0グッド

0クリップ

投稿2018/01/30 09:03

定期更新してくれるcronのことで質問です。
vpsでcronを使ってphpファイルを定期更新しています。
phpファイルなどは定期更新できるのですが、
例えば実行コマンドなどは設定できるのでしょうか?

また、crontab -l とコマンドを入力すると以下のように表示されますが、
10 16 * * * root /usr/bin/php /var/html/Test1/test.php

実行コマンドを設定する場合、
この記載の仕方もどうすれば良いのか分かりません。
どなたか教えてください。

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

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

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

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

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

guest

回答4

0

見たところ root とありますので、これはユーザの crontab ではなく /etc/cron.d 等にあるファイルかと思います。以下は crontab -l や crontab -e で表示されるユーザ用 crontab で説明します。

実行コマンドについても指定する事が出来ます。そのままコマンドを書いて下さい。実行するユーザのシェルを介してコマンドが実行されます。ただしコマンドを書いた場合、cron から実行するコマンドは .bashrc 等を読み込みませんのでユーザ独自の環境に依存したコマンドは実行出来ません。例えば rbenv 等。この場合

10 16 * * * /bin/bash -l php ...

の様に書く事が出来ますが何かの拍子に .bashrc を壊してしまう可能性もあるので、出来れば環境変数の値等も記述したスクリプトファイルを作ってそれを指定するか、crontab の各行の上に

FOO=BAR 10 16 * * * /bin/bash -l php ...

の様に記述して下さい。

もし最初に説明した様に crontab が -l で出力される様な物なのであれば root の文字を抜いてみて下さい。

投稿2018/01/30 09:18

mattn

総合スコア5030

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

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

po_tato

2018/01/30 09:34

すみません。大変親切に返信して下さっていてありがたいのですが、 コマンドを設定する仕方があまりよく分かりません。。 私はこのサイト、 http://glatchdesign.com/blog/web/coding/897 を参考に「gulp ejs」というコマンドをcronで設定したいのですが、 どうすればよろしいのでしょうか?
mattn

2018/01/30 09:37

crontab -e を実行するとテキストエディタが起動します。一番下の行に以下を追記して保存、終了します。 ※16時10分に gulp ejs というコマンドが実行されます。 10 16 * * * gulp ejs
po_tato

2018/01/30 10:07

10 16 * * * gulp ejs これだけだとあれなので、 10 16 * * * /var/html/Test1/gulp ejs pathも加えてみたのですが、何も起こりません。もちろん時間とは変更しています。何故失敗するのでしょうか?
mattn

2018/01/30 10:16

可能性としては2つあります。1つは crond が起動していない。もう一つは実行されておられるコマンドがユーザの環境に依存してしまっている事です。 crond が起動していないかは sudo service crond status で確認出来ます。起動していなければ sudo service crond start で起動して下さい。もう一つの可能性であれば、これが上記で説明した「.bashrc 等を読み込まない事で起きる事象」です。 これは上記の対応で回避して下さい。 もしメールスプーラを使っておられるのであれば失敗した理由が書かれていると思います。 mail というコマンドを実行すると最後の方に出てきます。
po_tato

2018/01/30 10:37

crondは起動していました。 mailの方も詳しくerrorなどは書いておりませんでした。 ulp ejsというコマンドが指定のディレクトリに移動してからしか反応しないコマンドなのでまずディレクトリに移動する記述も必要だったとmattnさんの返信で知りました。まだうまくいっていないのですが、その方向で少し考えてみようと思います。
po_tato

2018/01/31 01:24

すみません。サーバー側に届くメールを確認したところ、 "/bin/sh: gulp: コマンドが見つかりません" と書いてありました。 ちなみに cronでは 10 16 * * * cd /var/html/Test1; gulp ejs と設定していました。
mattn

2018/01/31 01:31

.bashrc 等で PATH に足された箇所にあるコマンドだからだと思います。フルパスで書いて頂くと直るかも。.bashrc 等で他にも gulp に影響しうる環境変数などがあれば、回答に書いた様に環境変数を羅列するか、スクリプトにしてスクリプトを crontab で指定されるのが良いかと思います。
po_tato

2018/02/01 02:40

crontabの設定について大変勉強になりました。 コメントして頂き本当にありがとうございました!
guest

0

今までの回答を見たうえでgulpのことはよくわからないですが別の観点で。

[気になった点1]
環境変数が設定されているのかどうか。具体的にはgulpコマンドが、cronを実行するときにちゃんと実行できるているのか。

試しに

10 16 * * * cd /var/html/Test1; /var/html/Test1/gulp -v > test.txt

とかやって、gulpコマンドのバージョンがtest.txtに吐き出されるかどうか見てみてはどうでしょうか。

バージョン情報がtest.txt内になかったらコマンドが実行自体出来ていないということになります。

環境変数(PATH)を設定するにはこの辺が参考になるかと。
https://qiita.com/positrium/items/a2de9af6c5b4d06b504e

[気になった点2]
実際に実行している
/var/html/Test1ディレクトリの実行権限がどうなっているか。例えば、rootで普段は作業していて、Test1ディレクトリをrootで作ったら、基本ディレクトリは644(root以外は読み込みしかできない)ので、ファイルを作成するとかはできないと思います。

上記のtest.txtをやってみてファイルが作成されていなかったら、その作業ディレクトリの権限を確認してみてはどうでしょうか。力業でやっちゃうのであれば/var/html/Test1を

chmod 755 /var/html/Test1

とか一時的に他ユーザでも書けるようにしちゃうとすぐ確認できるかも。

投稿2018/01/30 13:38

yatta47

総合スコア208

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

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

po_tato

2018/01/31 01:10

コメントありがとうございます! それはおそらくないかと思われます。 質問の最初の方にphpファイルをcronで設定していると言いましたが、 それは同じTest1ディレクトリに入っているものですので、、
guest

0

ベストアンサー

もちろん、unix コマンドの実行もできます。

crontab ファイルの中身は、左から

分 時 日 月 曜日 ユーザー コマンド

が、スペース区切りで並んでいます。
質問にある

10 16 * * * root /usr/bin/php /var/html/Test1/test.php

の場合は、

10分 16時 *日 *月 *曜日に root ユーザーが、コマンド「/usr/bin/php /var/html/Test1/test.php」を実行するという意味になります。
また、日時の * は、常にと解釈されるので、「10分 16時 *日 *月 *曜日」を簡略化すると「毎日 16時10分」になります。

なお、一般ユーザーで、 crontab コマンドを実行して、設定する場合は、「ユーザー」の部分がなくなって、設定項目は、下記のようになります。 (自分の権限でしか実行できないので、ユーザーは、自分のユーザー名に固定です。)

分 時 日 月 曜日 コマンド

詳しくは、マニュアルを参照してください。

投稿2018/01/30 09:18

編集2018/01/30 09:19
CHERRY

総合スコア25171

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

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

po_tato

2018/01/30 09:33

すみません。大変親切に返信して下さっていてありがたいのですが、 少し分かりませんでした。 私はこのサイト、 http://glatchdesign.com/blog/web/coding/897 を参考に「gulp ejs」というコマンドをcronで設定したいのですが、 どうすればよろしいのでしょうか?
CHERRY

2018/01/30 09:52

ユーザー権限で実行ということでよろしいですか? crontab -e で編集画面を開いて、記載してください。 たとえば、毎日 18時00分 に gulp ejs を1回だけ実行するのであれば、 0 18 * * * /パス/gulp ejs パスの部分は、環境によりことなるので、gulp コマンドのあるパスを記載してください。 もしくは、10分おきに 毎回起動するなら */10 * * * * /パス/gulp ejs のようになります。
po_tato

2018/01/30 10:05

10 16 * * * /var/html/Test1/gulp ejs このようにcron設定したのに何も起こりません。 (成功ならフォルダが作成される) 何か原因があるのでしょうか?
CHERRY

2018/01/30 10:08

普段使用する場合は、どのように使っているのでしょうか? もしかしたらディレクトリに移動してから gulp ejs を実行しているのではないですか?
po_tato

2018/01/30 10:09

その通りです!
CHERRY

2018/01/30 10:14 編集

そうであれば、 cron でも 同じようにディレクトリを移動して、コマンドを実行するように記載する必要があります。 移動先が /var/html/Test1 としたら、cd /var/html/Test1 をコマンドの前に追加して、コマンドとコマンドの間は、 ; (セミコロン)で 繋ぎます。 10 16 * * * cd /var/html/Test1; /var/html/Test1/gulp ejs あと、念のためですが・・・ 記載されている内容だと 16時10 分にならないと実行されないですが、それで、実行されていないということはないですよね?
po_tato

2018/01/30 10:35

10 16 * * * cd /var/html/Test1; /var/html/Test1/gulp ejs このように設定しましたが何故か出来ませんでした。 絶対にこれでうまくいくと思ったのですが、、 時間の設定はしっかりと変更しています。 もう少し考えてみます。。
mattn

2018/01/30 14:37

一度、他のコマンドを使って本当にコマンドが実行されているか確認してみて貰えますか。 出来れば結果が分かる様な物が良いかと。
po_tato

2018/02/01 02:37

別質問でgulpについての答えが得られたので、こちらのcronにおいては、 1番問題解決に近づかせて頂けたのでベストアンサーとさせて頂きました。
guest

0

つman 5 crontab

投稿2018/01/30 09:09

hichon

総合スコア5737

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

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

po_tato

2018/01/30 09:11

どういう意味でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問