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

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

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

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Linux

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

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

988閲覧

cronによるphpファイルの定期実行

dcf

総合スコア20

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Linux

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

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2019/05/22 11:33

前提・実現したいこと

cronでphpファイルを定期実行させるコマンドを別のphpファイルに記述する方法を模索しているのですが以下のエラーが表示されました。どのようにしたらこのエラーを解消し、正常にcronで定期実行させることができるのかに関してアドバイスをお願いします。
具体的には、テキストファイルに文字を出力するphpファイル[a.php]とa.phpを定期実行させるphpファイル[b.php]を用意していて今はb.phpに関するエラーが表示されている状態です

a.php↓

php

1<?php 2 file_put_contents("./sample.txt", "HELLO WORLD", FILE_APPEND); 3?>

b.php↓

php

1<?php 2exec("crontab -e; echo '* * * * * * 絶対パス'",$x,$y); 3print_r($x); 4echo '<br>'; 5var_dump($y); 6?>

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

0mVim: Error reading input, exiting... Vim: Finished.

このエラーについて検索しましたが、Vimが入力された文字を正常に読み取れなかったということしか分からず、具体的にどう修正したらいいのかが分からなかったです

試したこと

crontab -eを -lや -に変えてみましたが

Array() int(0)

のように表示されexec関数自体は正常に実行されるものの実際にテキストファイルには何も書き込まれていないという状態です

補足情報(FW/ツールのバージョンなど)

PHP 5.2.4
FTPソフトでファイルをアップロードしてブラウザでアクセスして実行するという流れで作業しています

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

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

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

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

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

m.ts10806

2019/05/22 12:11

タイトルがほぼ同じなので何が問題かタイトルだけみたときに分からないという問題が起きています
dcf

2019/05/22 12:43

先の質問に追記しようとしたのですが、一度編集してしまった上にコメントにも返信済みであったためにこちらから情報を発信できないという状態に陥ってしまったため、新たに質問をさせていただきました タイトルに関しては編集するタイミングで改善したいと思います アドバイスありがとうございます
guest

回答2

0

ベストアンサー

b.php

php

1<?php 2exec("echo '* * * * * * 絶対パス'|crontab",$x,$y); 3print_r($x); 4echo '<br>'; 5var_dump($y); 6?>

です。

投稿2019/05/22 14:58

otn

総合スコア84489

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

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

dcf

2019/05/23 04:12

こちらの回答を実行したところ 正常に動作致しました 大変ありがとうございました
guest

0

cronの設定を一旦テキストファイルに保存してください。

exec で crontab テキストファイル名 を実行すると crontab に登録されます。

◆ファイル
-rw-r--r-- 1 take88 take88 75 5月 22 23:33 a.php
-rw-r--r-- 1 take88 take88 81 5月 22 23:32 b.php
-rw-rw-r-- 1 take88 take88 58 5月 22 23:36 c.txt

a.php

php

1<?php 2 file_put_contents("./sample.txt", "HELLO WORLD", FILE_APPEND); 3?>

b.php

php

1<?php 2exec("crontab 'c.txt' ",$x,$y); 3print_r($x); 4echo '<br>'; 5var_dump($y); 6?>

c.txt

text

1* * * * * /usr/bin/php /home/take88/a.php

◆実行例

shell

1$ crontab -l ← 何も表示されない=Crontabは未設定状態 2$ php b.php 3Array 4( 5) 6<br>int(0) 7$ crontab -l 8* * * * * /usr/bin/php /home/take88/a.php ← Crontabに c.txt の内容が反映された

この状態で少し待つと sample.txt が作成されました。

-rw-r--r-- 1 take88 take88 75 5月 22 23:33 a.php
-rw-r--r-- 1 take88 take88 81 5月 22 23:32 b.php
-rw-rw-r-- 1 take88 take88 58 5月 22 23:36 c.txt
-rw-r--r-- 1 take88 take88 121 5月 22 23:47 sample.txt

投稿2019/05/22 11:57

編集2019/05/22 14:51
take88

総合スコア1351

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

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

dcf

2019/05/22 13:01

``` * * * * * * 絶対パス ``` という内容のテキストファイル(c.txt)を用意し、 ``` <?php exec("crontab -e; echo 'c.txt' ",$x,$y); print_r($x); echo '<br>'; var_dump($y); ?> ``` や ``` <?php exec("crontab 'c.txt' ",$x,$y); print_r($x); echo '<br>'; var_dump($y); ?> ``` と記述して実行してみた結果、前者は全く同じエラーが表示され、後者はexec関数が正常に実行されない(返り値が0ではなく1だった)という状態になりました 上記のコードに何らかの不備がありましたらご指摘の方をお願いします 度々申し訳ございません
take88

2019/05/22 14:41

前者は crontab の使い方が 正しくなく、そういう使いかたは出来ません。 私の環境だと 戻り値0で 正常に動きました。回答に追記しますので 見比べてみてください。
dcf

2019/05/22 16:14

追記していただいた回答をコピペして実行したところ返り値が1になったため、c.txtの部分を絶対パスで指定したところ返り値が0となりました。しかし、その後テキストファイルを開いてみても出力がされておらず、cronによる実行がされていない様子でした。返り値が0になったということは「crontabへの登録はされているが実行されない状態」という認識でよろしいのでしょうか? また、shellが使える環境ではないため回答にある実行例のような確認方法が取れない状態となっております。
dcf

2019/05/23 04:14

絶対パスをもう1度確認して実行したところ正常に動作致しました 大変ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問