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

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

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

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

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

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

Q&A

解決済

3回答

2183閲覧

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

kanitan

総合スコア15

cron

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

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

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

0グッド

0クリップ

投稿2019/03/25 23:35

編集2019/03/31 12:11

初めまして。

①環境:
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 ルミガン

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

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

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

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

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

y_waiwai

2019/03/25 23:44

コードを提示しましょう。
退会済みユーザー

退会済みユーザー

2019/03/26 00:33 編集

python3をフルパスで書いてもだめですかね? which python3 で出力されたパスに置き換えてみてください。
kanitan

2019/03/26 14:22

y_waiwai様 ありがとうございます。 コードの中身がnoteで購入したコードを参考しており、ここに添付してよいのか判断がつかなかったため、提示をしなかった次第です。ファイルの実行ですと、問題なくtwitter上でいいねができておりました。 cow_cow様 ありがとうございます。 which python3で出力したパスに置き換えてみたのですが、cronの実行ができませんでした、 念の為コードを記載いたします MAILTO=root PYTHONIOENCODING = 'utf-8' LANG=ja_JP.UTF-8 15 * * * * /anaconda3/envs/pytorch04cpu/bin/python3/twitter/autoLike.py ルミガン >> /anaconda3/envs/pytorch04cpu/bin/python3/twitter/autoLike.log
y_waiwai

2019/03/27 00:47

本番のコードではなく、例えば簡単なメッセージをファイルに追記していくなどの簡単なコードをそれで実行してみてください。
kanitan

2019/03/27 23:31

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

2019/03/30 00:51

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

2019/03/30 02:14

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

回答3

0

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

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

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

投稿2019/04/06 03:50

kanitan

総合スコア15

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

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

0

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

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

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

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

投稿2019/04/03 10:59

t_obara

総合スコア5488

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

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

kanitan

2019/04/05 07:38

t_obara様 ありがとうございます。 ・time.pyが追記(3/30)に記載した2つめのコードです。 ・シェバングをbashからpythonに変えてみましたが、実行が不可でした。 ですよね、autoLike.py ミルガンで動作するのですがなぜかcronで定期実行ができず、行き詰まっている状態です。。 ・PATHを通す ・フルパスで実行 ・シェバングの設定 ・実行権限の付与 ・Anacondaの仮想で実行/ローカルで実行 ここまで試しましたが、いずれも効果なしでした
guest

0

ベストアンサー

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

投稿2019/03/26 00:33

kazto

総合スコア7196

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

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

kanitan

2019/03/26 14:18

ありがとうございます。 フルパスで記載してみたのですが、cronの実行が実現しませんでした。 ねんのため再度コードを記載いたします↓ MAILTO=root PYTHONIOENCODING = 'utf-8' LANG=ja_JP.UTF-8 15 * * * * /anaconda3/envs/pytorch04cpu/bin/python3/twitter/autoLike.py ルミガン >> /anaconda3/envs/pytorch04cpu/bin/python3/twitter/autoLike.log
kazto

2019/03/27 00:40

スクリプトに実行権限はついていますか?
kanitan

2019/03/27 12:51

すいません、仕事で遅くなってしまいまして スクリプトに実行権限つけたのですが、かわらず、でした drwxr-xr-x 2 ユーザーネーム staff 64 3 24 15:31 autoLike.log -rwxr-xr-x 1 ユーザーネーム staff 1656 3 23 14:39 autoLike.py
kazto

2019/03/28 04:30

それでは、以下が考えられます。 - スクリプトの不備、正常に動いていない可能性 - anacondaのpythonにアクセスできない可能性 anaconda内ではなく、システムのpythonを使うことはできませんか?
kazto

2019/03/28 04:31

スクリプトの内容を追記できますでしょうか。コメントに記載するのではなく、質問を編集する形で、インデントがわかるように追記いただけると助かります。
kanitan

2019/03/28 13:00

どうもありがとうございます、 - スクリプトの不備、正常に動いていない可能性 →スクリプトの内容をターミナルで「echo $SHELL」で出したものを追記しました。もしご提示したものと異なる場合は教えていただけますと幸いです。 - anacondaのpythonにアクセスできない可能性 →システムのpythonを使ってみたのですが、や実行ができませんでした
kazto

2019/03/29 00:13

すいません、言い方があいまいでした。 「スクリプトの内容」=「autoLike.pyの内容」です。
kanitan

2019/03/30 00:48

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

2019/03/31 08:49

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

2019/03/31 12:12

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問