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

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

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

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

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Python

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

Q&A

解決済

1回答

2118閲覧

定期実行の結果を標準出力でファイルに保存したい

study_111

総合スコア82

cron

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

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Python

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

0グッド

0クリップ

投稿2020/05/20 05:54

編集2020/05/20 07:20

定期実行を行なった結果の標準出力と標準エラー出力を、ファイルにて保存したいのですが、ファイルが作成されない状況です。
以下が定期実行ファイルをまとめたcron.confです。cronへは「crontab cron.conf」として登録致しました。

32 14 * * 1-5 cd /var/www/django/test/polls && python manage.py test_app >> /var/www/django/test/polls/`date "+%Y%m%d_%H%M%S"`.log 2>&1

「/var/log/syslog」には以下のように記載されていました。

CRON[22497]: (ubuntu) CMD (cd /var/www/django/test/polls/ && python manage.py test_app >> /var/www/django/test/polls/`date "+)

※ディレクトリ名に関しましては、適当なものに置き換えました。

こちらの現象の解決の為、ご助言頂けましたら幸いです。

追記➀
手動で、以下のコマンドを実行させたのですが、ファイルは作成されませんでした。
python manage.py test_app >> /var/www/django/test/polls/`date "+%Y%m%d_%H%M%S"`.log 2>&1
追記➁
出力先のディレクトリを変更したら、ログファイルが作成されていることが確認できました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

cronで起動されているとしたらあとは環境依存になるので、
・手動実行は問題ないか
・移動先や書き込み先に権限はあるか
・echo xxx など単純な出力ではどうか
・出力先を変えてみるとどうか
・アプリケーションやパラメータをフルパスで指定するとどうか
などと調べていってあたりを付けるしか無いかなと。

投稿2020/05/20 06:54

x98000

総合スコア1096

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

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

study_111

2020/05/20 07:15 編集

ご回答ありがとうございます。 >手動実行は問題ないか こちらですが、手動実行したのですが、ファイルは作成されませんでした。 > 移動先や書き込み先に権限はあるか 書き込み先のディレクトリは「drwxrwxr-x 7」となっておりました。 >echo xxx など単純な出力ではどうか print()として変数を出力させてみましたが、ファイルは作成されなかったといった状況です...
study_111

2020/05/20 07:19

>出力先を変えてみるとどうか こちらですが、出力先を変更してみましたら、ログファイルが作成されていることが確認できました。 権限の問題であったのでしょうかね...?
study_111

2020/05/20 07:34

勘違いしてしまっていたのですが、今、「/var/www/django/test/polls/」こちらのディレクトリ内で「ls -a」としましたら、ログファイルが作成されていることが確認できました。
x98000

2020/05/20 08:56

よくあることです。順を追って確認していくしか無いんですよね。
study_111

2020/05/20 13:24

すみません... 問題が解決したと勘違いしてしまっていました... 現在は、何故か手動で「python manage.py test_app >> /var/www/django/test/polls/`date "+%Y%m%d_%H%M%S"`.log 2>&1」こちらのコマンドを実行するとログファイルへ保存されるのですが、定期実行ではログファイルが保存されないといった状況になってしまいました...
x98000

2020/05/20 15:32

cron で「echo xxx >> /var/www/django/test/polls/`date "+%Y%m%d_%H%M%S"`.log 2>&1」は実行されてログ出力されますか?
study_111

2020/05/20 23:20 編集

いえ...やはり手動で実行した場合はログファイルが作成されるのですが、定期実行の場合はログファイルは作成されません... しかし、「/var/log/syslog」にはcronコマンドの実行ログが残っている状況です。
x98000

2020/05/21 00:59

出力先を変えるとログファイル出力されるとのことなので、やはり権限のような気がします。 書き込み先ディレクトリを chmod 777 にするか、手動起動が出来ているユーザでcronを起動してみてはどうでしょうか。
study_111

2020/05/21 07:46

ご返信ありがとうございます。 ログファイルの作成先を「chmod 777 」として、「ls -l /home」で表示されたユーザーで定期実行を行うよう、「ubuntu echo xxx >> /var/www/django/test/polls/`date "+%Y%m%d_%H%M%S"`.log 2>&1」」としましたが、ログファイル作成に失敗してしまいました...
x98000

2020/05/21 09:59

うーん… ・ログファイル作成先を変えると問題ないのでcronでのコマンド起動は問題なし ・作成先の権限を開放して手動起動では問題ないので作成先も問題なし ・syslogを見るとcronで起動はされている あとは… cronでの記述を間違えているくらいしか思い浮かばないですね…
x98000

2020/05/21 10:00

あ、16:46の書き込みにある「ubuntu echo xxx ~ の"ubuntu"ってなんですか?
study_111

2020/05/21 14:22

>「ubuntu echo xxx ~ の"ubuntu"ってなんですか? こちら、手動実行で定期実行が成功した為、手動実行したユーザー名を調べる為、「ls -l /home」にて表示された以下の結果(一部非表示としています)から、「ubuntu」と特定し、「ubuntu」として、cronを実行致しました。 「/home total 4 drwxr-xr-x 13 ubuntu ubuntu 17:45 ubuntu」
x98000

2020/05/21 21:59

あれ?crontab で設定しているんですよね?頭にユーザー名は不要では。 最初の質問にも入っていませんでしたが。
study_111

2020/05/22 10:05

あ、頭のユーザー名は、手動起動させた際と同じユーザー名だったら、定期実行が行われるかなと思い、念の為、試してみただけでございました。
x98000

2020/05/22 10:09

crontab でユーザー名を入れると実行できないのでは?
study_111

2020/05/22 10:11

ユーザー名は、cron.confファイルに記載したコマンドに追記した形でした。 その後、crontab cron.conf で登録しましたら、再度定期実行が行われることが確認出来ました。
x98000

2020/05/22 10:19

うまくいったんですか?
study_111

2020/05/22 10:22 編集

いえ、ログファイルは作成されませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問