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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

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

Q&A

解決済

2回答

1519閲覧

crontabでpythonを実行したいです。

sususu

総合スコア99

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

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

0グッド

0クリップ

投稿2019/01/21 14:20

表題の件のとおりですがcrontabでpythonのプログラムを実行したいのですができません。
どなたかご教授いただければ幸いです。環境は下記の通りです。

python3.5 -V Python 3.5.6
which python3.5 /bin/python3.5
cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)

クーロンで実行したいプログラムの絶対パス

find / -name test.py /home/xxx/yyy/zzz/test.py
crontab -e 44 21 * * * cd /home/xxx/yyy/zzz; /bin/python3.5 test.py > /dev/null 2>&1

python /home/xxx/yyy/zzz/test.pyで実行するとtest.pyが同じ階層の設定ファイルを呼び出せませんでした。
なのでcdを行ってからpythonを実行しようとしているのですが実行の記述の仕方がわかりません。
『/bin/python3.5 test.py』の部分を
『python test.py』などに変更もしたのですが動きません。

下記のサイトを確認し環境変数など調べていたのですがpyenvなど見つからず意味もよくわかりませんでした。

https://blog.kyabe.net/2016/10/python-cron.html

linuxはほとんど触ったことがなく苦戦しております。
すいませんがどなたかご教授いただけると助かります。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

なのでcdを行ってからpythonを実行しようとしているのですが実行の記述の仕方がわかりません。

ということですが、

crontab

144 21 * * * cd /home/xxx/yyy/zzz; /bin/python3.5 test.py

で合っています。

動きません。

とは?具体的な現象(エラーメッセージとか)を書いてください。

投稿2019/01/21 14:44

編集2019/01/21 15:06
otn

総合スコア84498

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

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

sususu

2019/01/21 15:43

すいませんまだエラーログの出し方もわからないのですが下記のコマンドで該当時間を見たら下のようなメッセージだけはありました。 tail /var/log/messages Created slice User Slice of root. Started Session xxxx of user root. Removed slice User Slice of root. tail -f /var/log/cron (cd /home/xxx/yyy/zzz; /bin/python3.5 test.py > /dev/null 2>&1) エラーの調べ方についてもう少し調べてみます!
otn

2019/01/21 15:46

> /dev/null 2>&1 の意味がわからないということでしょうか? 44 21 * * * cd /home/xxx/yyy/zzz; /bin/python3.5 test.py >/tmp/log 2>&1 で、/tmp/logをみてください。
sususu

2019/01/22 00:47

パソコンの電源が落ちてしまい返信遅れて申し訳ありません。 下記でtmp/logを確認いたしました。 44 21 * * * cd /home/xxx/yyy/zzz; /bin/python3.5 test.py >/tmp/log 2>&1 Traceback (most recent call last): File "test.py", line 3, in <module> from scraping import activate File "/home/xxx/yyy/zzz/scraping.py", line 33 title = column_html.find(config[g_config_name]['title_element']).string ^ TabError: inconsistent use of tabs and spaces in indentation 同じ階層にあるconfigファイルが読み込めていないみたいです。 cd /home/xxx/yyy/zzz python test.py だとちゃんと実行できるのですがなぜクーロンからだとエラーになってしまうのでしょうか?
otn

2019/01/22 00:58

> TabError: inconsistent use of tabs and spaces in indentation がエラーですよね。scraping.pyの33行目のインデントがおかしい(スペースとタブの混在?)ようですが。 逆にコマンドラインから何故実行できるのか謎。 > python test.py > だとちゃんと実行できるのですが python3.5 test.py ですよね?? あと、「クーロン」と書くと、普通は https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%BC%E3%83%AD%E3%83%B3 の意味なので非常に違和感。cronを片仮名で書くならクロンです。
sususu

2019/01/22 01:15

先ほどtest.pyのスペースをすべてtabに変更しました。 すいません、直接実行しているときはpython3.5 test.py ではなくpython test.pyで実行しております。 cronの件ご指摘ありがとうございます。これから英語を使うようにいたします。
sususu

2019/01/22 01:27

スペースを置き換えたからだと思いますが、 もう一度実行したらエラーが変わりました。 今度はimportができなくなっているみたいです。 Traceback (most recent call last): File "test.py", line 3, in <module> from scraping import activate File "/home/xxx/yyy/zzz/scraping.py", line 2, in <module> import requests ImportError: No module named 'requests'
otn

2019/01/22 01:33

pythonとpython3.5が別物なのでは? 何故コマンドラインでpythonで、cronでpython3.5で実行しているのですか? 違う事をすると違う結果になるのは当たり前です。
sususu

2019/01/22 01:36

すいません! そこらへんもよくわかっていなかったのでインストールした3.5でやってしまっていました。 気を付けます。
sususu

2019/01/22 02:15

ご指摘の通り下記に変更したところまた違うエラーが返ってきました。 44 21 * * * cd /home/xxx/yyy/zzz; /bin/python test.py >/tmp/log 2>&1 Traceback (most recent call last): File "test.py", line 14, in <module> activate(config_name) File "/home/xxx/yyy/zzz/scraping.py", line 18, in activate href_list = inspect_href(columns) File "/home/xxx/yyy/zzz/scraping.py", line 62, in inspect_href print(str(title)) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128) scraping.pyには#config: utf-8の記述はしていますが… 文字コードについて調査してみたいと思います。
guest

0

まず、pythonスクリプト test.pyの一行目にこれを書いて、

#!/bin/python3.5

bash

1chmod +x test.py

して実行できるようにします。
次に、以下のようにcrontabに登録します。

44 21 * * * /home/xxx/yyy/zzz/test.py > /dev/null 2>&1

投稿2019/01/21 14:34

fu7mu4

総合スコア1088

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

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

sususu

2019/01/21 15:23

夜分遅くにご回答ありがとうございます。 下記の通り変更したのですが動きませんでした。 他に何か確認する部分はありますでしょうか? すいませんがよろしくお願いします。 パーミッション変更 -rwxr-xr-x 1 root root test.pyより抜粋 #!/bin/python3.5 #config: utf-8 crontabより抜粋 16 0 * * * /home/xxx/yyy/zzz/test.py > /dev/null 2>&1 -f /var/log/cronの結果 (/home/xxx/yyy/zzz/test.py > /dev/null 2>&1)
fu7mu4

2019/01/21 15:29

/home/xxx/yyy/zzz/test.py とフルパス指定で実行できるかどうか確認してください。
sususu

2019/01/21 15:46

python /home/xxx/yyy/zzz/test.py はパスは通っていました。 ちゃんと相対パスで指定していたiniファイルが読み込めなというエラーが返ってきました。
fu7mu4

2019/01/21 15:48

pythonなしでお願いします。
fu7mu4

2019/01/21 15:49

また、python と実行した場合 python2で処理される可能性がありますので注意してください。
sususu

2019/01/21 15:56

crontab -eで下記のように書き込みましたが実行されていませんでした。 51 0 * * * /home/xxx/yyy/zzz/test.py
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問