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

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

ただいまの
回答率

87.61%

cronの実行ができない件につきまして

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,547

score 15

初めまして。

①環境:
MacOS Mojave 

②やりたいこと:
毎時15分ごとに「autoLike.py」の中身を実行したい。

②問題:
AncondaからJupyterを立ち上げて.pyファイルを作成し、ターミナル上での実行に成功。
しかし、cronで定期実行をしたいが動作しない。

③試したこと:

crontab -eの中身を記載("ユーザーネーム"の箇所は半角英数字で記載しています)

MAILTO=root

PYTHONIOENCODING = 'utf-8'
LANG=ja_JP.UTF-8
15 * * * * python3 /Users/ユーザーネーム/twitter/autoLike.py ルミガン >> /Users/ユーザーネーム/twitter/autoLike.log

④備考
・ターミナルでpython3 autoLike.py ルミガンを実行すると、問題なくファイルの中身が作動します。
大変お手数ですが、ヒントをいただけますと幸いです。
よろしくお願いいたします。

追記(3/28)

/bin/bash

追記(3/30)

import tweepy
import time
import sys
from datetime import datetime

CONSUMER_KEY = "キー"
CONSUMER_SECRET = "キー"
ACCESS_TOKEN = "キー"
ACCESS_SECRET = "キー"

#関数群
def searchTweets(query):
    tweets = api.search(q=query, count=100)
    return tweets

def likeTweets(tweets):
  like_count= 0
  created_at = datetime.now().strftime("%Y%m%d%H%M%S")
  for tweet in tweets:
    user_id = tweet.user._json['screen_name']
    tweet_id = tweet.id
  try:
    api.create_favorite(tweet_id) #フォロワーでなければいいねする
    print("{}:[INFO]以下のユーザーをいいねしました。user_id:{}".format(created_at, user_id))
    like_count += 1
    print("[INFO]いいね数: {}".format(like_count))
  except Exception as e:
    print("[ERROR]いいねに失敗しました: {}".format(e))
    if e.response and e.response.status == 429:
        print("[INFO] rate limitの上限値を超えたので、15分待機後に実行します。")
        time.sleep(60 * 15)
    if e.response and e.response.status == 139:
        print("[ERROR] すでにいいねをしているツイートです")
  return like_count

if __name__ == '__main__':
   #Tweepy
   auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
   auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
   #APIインスタンスを作成
   api = tweepy.API(auth)
   #引数を受け取る
   args = sys.argv
   query = args[1] #中身がhoge
   #いいねする
   tweets =  searchTweets(query)
   likeTweets(tweets)
from time import sleep
from threading import Thread
# Threadオブジェクトをインポート

target_time = 10

def up_timer(secs):
    for i in range(0,secs):
        print(i)
        sleep(1)
    print("カウントアップ終了!")


def down_timer(secs):
    # for i in range(0,secs):から変更
    for i in range(secs, -1, -1):
        # 以下同じ・・・

        print(i)
        sleep(1)
    print("カウントダウン終了!")

# Threadインスタンスをタイマーごとに生成する
thread_1 = Thread(target=up_timer,args=(target_time,))
thread_2 = Thread(target=down_timer,args=(target_time,))

# それぞれのスレッドを起動する
thread_1.start()
thread_2.start()

(追記3/31)

「autoLike.py」の先頭にシェバンを追記

#!/usr/bin/env bash

which python3の実行結果

/anaconda3/bin/python3

crontab -eの中身(Jupyterでtwitterという名のフォルダを作成し、その中にスクリプトファイルを作成)

5 * * * * /anaconda3/bin/python3/twitter/autoLike.py ルミガン

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kanitan

    2019/03/28 08:31

    y_waiwai様
    すいません、autoLike.pyではない別のファイルを作成し、それをcronで実行してみる、ということでしょうか??

    キャンセル

  • y_waiwai

    2019/03/30 09:51

    そゆことですね。それで実行できた、というなら、問題はあなたのコードにあるってことになります

    キャンセル

  • kanitan

    2019/03/30 11:14

    y_waiwai様
    どうもありがとうございます。そのような方法もあるのですね。
    別ファイル「time.py」を実行してみたのですが、やはり実行がされませんでした、
    念のためファイルの中身も追記させていただきます。

    キャンセル

回答 3

checkベストアンサー

0

スクリプトの内容にも依存しますが、少なくとも、python3はフルパスで記載する方が良さそうです。
crontab内では、PATHは基本通っていません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/30 09:48

    ご連絡が遅くなりまして、すいません。

    こちら「autoLike.pyの内容」を追記いたしました。
    なんどもお手数ですが、よろしくお願いいたします。

    キャンセル

  • 2019/03/31 17:49

    1行目にシェバングを記載していないので、スクリプト自体を実行することはできません。
    シェバングを記載するか、python3をフルパスで指定して実行するかのいずれかが必要です。

    キャンセル

  • 2019/03/31 21:12

    ジェバングを追記し、puthon3をフルパスで実行してみたのですが、実行ができませんでした、
    今回の対応したことを追記させていただきましたので、お手数ですが一度みていただけますと幸いです。

    キャンセル

0

整理されたらよろしいかと思います。

・簡単なコードで試す(time.pyはどれですか?)
そしてそれが実行されなかったか否かはどのように確認されたのですか?

・シェバング(pythonです、bashではなく)を設定する
あるいはpython3 autoLike.py のような形で実行するよう試してみる

python3 autoLike.py ルミガン」で動作することを確認されたのであれば、
cronでも同じように設定するのがよかろうと思います。
autoLike.py ミルガン
のように動作させたいのであれば、ターミナルでも同じように確認されると良いかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/05 16:38

    t_obara様
    ありがとうございます。
    ・time.pyが追記(3/30)に記載した2つめのコードです。
    ・シェバングをbashからpythonに変えてみましたが、実行が不可でした。

    ですよね、autoLike.py ミルガンで動作するのですがなぜかcronで定期実行ができず、行き詰まっている状態です。。
    ・PATHを通す
    ・フルパスで実行
    ・シェバングの設定
    ・実行権限の付与
    ・Anacondaの仮想で実行/ローカルで実行

    ここまで試しましたが、いずれも効果なしでした

    キャンセル

0

cronの設定に関しまして、以下で解決することができました。

5 * * * * cd /ユーザーネーム/twitter/; /anaconda3/bin/python3 /Users/ユーザーネーム/twitter/autoLike.py ルミガン

ここに回答してくださった皆様、ありがとうございました!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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