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

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

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

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

Linux

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

4500閲覧

cronが実行されるようにしたい

cutegirls

総合スコア9

cron

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

Linux

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/06/24 03:54

編集2018/06/24 04:00

前提・実現したいこと

さくらのクラウドで、5分おきにpythonのプログラムを実行したいです。
test.pyを実行すると、現在時刻をlog.txtに書くというものです。
環境:Ubuntu18(さくらのクラウド)

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

しかし、cronで以下のように設定してみたのですが、動きません。 手動で実行すると動くので、cronの設定に問題があると考えています。 エラーメッセージの表示はありません。

該当のソースコード

bash

1$ crontab -l 2*/5 * * * * python /home/myname/testpy.py 3 4$ ls -la 5-rwxrwxrwx 1 myname myname 239 Jun 22 00:09 testpy.py 6-rwxrwxrwx 1 myname myname 239 Jun 22 00:09 log.txt 7 8$ sudo service crontab status 9● cron.service - Regular background program processing daemon 10 Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled) 11 Active: active (running) since Sun 2018-06-24 11:43:25 JST; 57min ago 12 Docs: man:cron(8) 13 Main PID: 320 (cron) 14 Tasks: 1 (limit: 1118) 15 CGroup: /system.slice/cron.service 16 └─320 /usr/sbin/cron -f 17

試したこと

pyファイルのパーミッションを777に。
pythonのバージョンを2や3でトライ。
pythonのパスを、絶対パスで表記。
5分おきを毎分に→ */5を *に。
chownで root:root に変更(動かなかったため戻した)。
ユーザは myname です。
その他、ググって出てくる情報はいろいろ試してみました。

なにかアドバイスいただければ幸いです。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

KojiDoi

2018/06/24 04:19

/var/log/cronに何か出ていませんか?
cutegirls

2018/06/24 04:33

調べてみたのですが、そのファイルは存在しないようです。
cutegirls

2018/06/24 05:30 編集

Jun 24 14:23:01 Ubuntu18 CRON[2667]: (myname) CMD ([2668] python /home/myname/testpy.py) Jun 24 14:23:01 Ubuntu18 CRON[2667]: (myname) END ([2668] python /home/myname/testpy.py) tail -f で見ていますが、この表示が1分おきに出ます。 エラー表示は無いようです。 cronは正常に動いていて、何らかの問題で書き込みが出来ていない(でも単体では動く)ということでしょうか?
guest

回答2

0

ベストアンサー

python側に問題がある可能性も捨てきれないようです。

思いつく対処として:
0. ファイル名は全部フルパスで指定する。
0. 標準入力・標準エラー出力を/tmpなど確実に書き込めるはずのディレクトリに書き込むようにして何が起こるか見る。

投稿2018/06/24 06:01

KojiDoi

総合スコア13671

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

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

cutegirls

2018/06/24 06:16

先ほど /tmp/testpy.log に出力するようにしてみたのですが、空のファイルができるだけでした。ちなみにその際 /var/log/cron.log には、このコマンドが実行され終了したこと(CMD→END)が表示されていて、エラーなどはありません。ご指摘の通りpythonは、 /usr/bin/python に書き換えました。
KojiDoi

2018/06/24 06:22

> ご指摘の通りpythonは、 /usr/bin/pythonに そこじゃなくてpythonスクリプト内の話です。読み取り・書き込みで何かファイルをオープンしていると思いますが、特定のディレクトリをカレントディレクトリと決めつけて処理したりしていませんかということです。
cutegirls

2018/06/24 06:47

ありがとうございます。仰る通り、時刻を書き込む先の log.txt がフルパスではなかったのが原因でした。長々とお付き合いくださり感謝いたします。とても助かりました。
guest

0

以下のように書き換えて、実行時のエラーを確認して下さい。

bash

1$ crontab -l 2*/5 * * * * python /home/myname/testpy.py > /tmp/testpy.log 2>&1

追記1
cronからの実行では、環境変数などは必要最小限しか設定されていません。
スクリプトに以下のコードを追加して必要な環境変数が設定されているか確認して下さい。

bash

1import os 2 3for env in os.environ: 4 print(env)

投稿2018/06/24 05:54

編集2018/06/24 06:23
hichon

総合スコア5737

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

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

cutegirls

2018/06/24 06:09

/tmp/testpy.log は出来たのですが、中身が空です。ますますcron側には問題がないように思えてきました。
hichon

2018/06/24 06:23

追記しました。
cutegirls

2018/06/24 06:45

ありがとうございます。実行してみたところ LESSOPEN SSH_CLIENT などの文字列が表示されました。このスクリプトで環境変数を確認することにより、何をするのかを教えていただけますでしょうか。testpy.py の中で環境変数を使っているのであれば、それがここに出てくるか?を確認する、ということでしょうか。問題は解決したのですが、後学のために教えていただけますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問