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

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

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

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

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

解決済

RasberryPi【python】:G-mail送受信のcron定期実行が動作しない。

rockey_7625
rockey_7625

総合スコア24

cron

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

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

1回答

0評価

0クリップ

324閲覧

投稿2021/12/31 02:21

編集2021/12/31 02:52

お世話になります。
ラズパイにてG-MAILのAPIを使用してメール送受信を定期実行させるプログラムを製作しているのですが
うまく動作せず困っております。。。

pycharm上で正常動作を確認し、さらにラズパイにpythonファイルを転送してラズパイのterminal上で
コマンドを実行してラズパイ上でも動作するところまで確認できています。
ただ、これをcronで設定して動作させようとすると何故か動作しません。。。【添付画像】

プログラム自体はPC/ラズパイで動作しているので間違いはないと思っているのですが
cronで動かないのが何故か解らないのです。。。。

色々調べたのですが、どうしても解らずすいませんが熟練の方々の知恵でアドバイス頂きたく
お手数です何とか宜しくお願い致します。
※ラズパイでcronの起動確認コマンドを実施したところ、cronは起動しているようです。【追記】
イメージ説明

python

from google.oauth2.credentials import Credentials from googleapiclient.discovery import build import json import base64 import smtplib from email.mime.text import MIMEText from email.utils import formatdate def get_header(headers, name): for h in headers: if h['name'].lower() == name: return h['value'] mail_data_list = [] def main_recieve(): scopes = ['https://mail.google.com/'] creds = Credentials.from_authorized_user_file('token.json', scopes) service = build('gmail', 'v1', credentials=creds) messages = service.users().messages().list(userId = 'me', q = 'from: ipsum.240s-o.m@docomo.ne.jp').execute().get('messages') for message in messages: # print('=' * 30) m_data = service.users().messages().get(userId = 'me', id = message['id']).execute() # ヘッダー情報を取得 headers = m_data['payload']['headers'] # 日付情報を取得 message_data = get_header(headers, 'date') # print('日付: ' + str(message_data)) #差出人情報を取得 from_data = get_header(headers, 'from') # print('差出人: ' + str(from_data)) # 宛先情報を取得 to_data = get_header(headers, 'to') # print('宛先: ' + str(to_data)) #件名情報を取得 sub_data = get_header(headers, 'subject') mail_data_list.append(sub_data) # print('件名: ' + str(sub_data)) def main_send(): sendaddress = 'roidandios.2576@gmail.com' password = '*********' subject = 'テストメール' bodyText = f'テストプログラム{mail_data_list}' fromAddress = 'roidandios.2576@gmail.com' toAddress = 'light.and.dark.7625@gmail.com' smtpobj = smtplib.SMTP('smtp.gmail.com', 587) smtpobj.starttls() smtpobj.login(sendaddress, password) msg = MIMEText(bodyText) msg['Subject'] = subject msg['From'] = fromAddress msg['To'] = toAddress msg['Date'] = formatdate() smtpobj.send_message(msg) smtpobj.close() if __name__ == '__main__': main_recieve() main_send()

raspi

progman-7916@raspberrypi:~ $ sudo /etc/init.d/cron status ● cron.service - Regular background program processing daemon Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2021-12-31 02:31:14 JST; 9h ago Docs: man:cron(8) Main PID: 370 (cron) CGroup: /system.slice/cron.service └─370 /usr/sbin/cron -f 12月 31 11:36:01 raspberrypi CRON[10157]: (CRON) info (No MTA installed, discarding output) 12月 31 11:36:01 raspberrypi CRON[10157]: pam_unix(cron:session): session closed for user progman-7916 12月 31 11:39:01 raspberrypi CRON[10220]: pam_unix(cron:session): session opened for user progman-7916 by (uid=0) 12月 31 11:39:01 raspberrypi CRON[10224]: (progman-7916) CMD (python /home/progman-7916/mail_recieve.py) 12月 31 11:39:01 raspberrypi CRON[10220]: (CRON) info (No MTA installed, discarding output) 12月 31 11:39:01 raspberrypi CRON[10220]: pam_unix(cron:session): session closed for user progman-7916 12月 31 11:42:01 raspberrypi CRON[10259]: pam_unix(cron:session): session opened for user progman-7916 by (uid=0) 12月 31 11:42:01 raspberrypi CRON[10263]: (progman-7916) CMD (python /home/progman-7916/mail_recieve.py) 12月 31 11:42:02 raspberrypi CRON[10259]: (CRON) info (No MTA installed, discarding output) 12月 31 11:42:02 raspberrypi CRON[10259]: pam_unix(cron:session): session closed for user progman-7916

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

otn

2021/12/31 10:51

画像が見づらいですが、「動作しません」と判断した根拠となる具体的事実は何でしょうか?
rockey_7625

2022/01/01 01:53

見て頂きありがとうございます。 動作しないと判断した理由はこのプログラムは実行すると最終的に自分のメールアドレス宛にメールが返ってくるのですが、コマンドによる手動スクリプト実行ではすぐにメールが返ってきます。 しかし、cronで実行させるとメールがいつまでたっても全く返ってこないので、動作しないと判断しました。 色々調べてやってみたのですが、原因が解っていないのです。。。
otn

2022/01/01 05:34

> 色々調べてやってみたのですが 端末からなら実行できるのにcronからだと期待通りで無いという原因はいろいろありますが、どの原因についてどのように調べて、どういう結果だったかを質問に追記してください。
rockey_7625

2022/01/01 05:56

今のところ当方がやってみたのは以下の通りです。 ・)cronの起動確認で(CRON) info (No MTA installed, discarding output)の記載が出ているので もしかしてpostfixを入れる必要があるのかと思いsudo apt-get install postfixでpostfixをインストール ↓ インストール後、再度cron動作確認したがNG 再度cron起動確認したが下記表示が抱ている状態で、これ以上自分ではどうすればよいか思いつかず 途方に暮れています。。 progman-7916@raspberrypi:~ $ sudo /etc/init.d/cron status [sudo] progman-7916 のパスワード: ● cron.service - Regular background program processing daemon Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2021-12-31 16:35:38 JST; 22h ago Docs: man:cron(8) Main PID: 351 (cron) CGroup: /system.slice/cron.service └─351 /usr/sbin/cron -f 12月 31 16:36:01 raspberrypi CRON[991]: (progman-7916) CMD (python /home/progman-7916/mail_rec…e.py) 12月 31 16:36:02 raspberrypi cron[351]: sendmail: fatal: open /etc/postfix/main.cf: No such fi…ctory 12月 31 16:36:02 raspberrypi postfix/sendmail[993]: fatal: open /etc/postfix/main.cf: No such f…tory 12月 31 16:36:02 raspberrypi CRON[987]: (progman-7916) MAIL (mailed 195 bytes of output but go…m MTA ) 12月 31 16:36:02 raspberrypi CRON[987]: pam_unix(cron:session): session closed for user progman-7916
otn

2022/01/01 06:35

> 端末からなら実行できるのにcronからだと期待通りで無いという原因はいろいろありますが、 については何も調べてないと言うことですね。 長くなるので、回答の方に書きます。
rockey_7625

2022/01/01 06:44

すいません、端末とcronで動作する・しないについてはどういう調べ方をすればよいか思いつかず 調べてないです。。。【cronは今回初めて使用したのでまだ細かい部分まで理解できていないため。】

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

cron

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

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