現在、Python言語を勉強しているものです。
右も左もわからない私にどうか救いの手を、、、、
バージョン python3 3.7.3
ラズパイにてpythonを使用し、定期的にプログラムを実行するために、crontabを使用することがわかりいろいろためしてみたのですが、エラーがでており起動されていないようです。error(grandchild。。。。。)以下でております。
Oct 21 15:45:01 raspberrypi CRON[18084]: (pi) CMD ([18088] /usr/bin/python3 /home/pi/adxl345-Python/df/ftp_up3.py) Oct 21 15:45:01 raspberrypi CRON[18084]: (CRON) error (grandchild #18088 failed with exit status 1) Oct 21 15:45:01 raspberrypi CRON[18084]: (pi) END ([18088] /usr/bin/python3 /home/pi/adxl345-Python/df/ftp_up3.py)
いろんなサイト見て、設定は完了しているのですが、絶対pathがおかしいのでこの異常が出ていますますでしょうか??
自分がcrontab -eに設定しているのは以下です。
*/1 * * * * /usr/bin/python3 /home/pi/adxl345-Python/df/ftp_up3.py
(手動でのftp up3.pyのプログラムは正常に動作します。)
いくらpathのところをいじっても上手くいきません、、、
たくさんの助言ありがとうございます。
ftp_up3.pyのコードは以下です。
import ftplib import datetime def ftp_upload(filename): ftp = ftplib.FTP('***.***.*.**') ftp.set_pasv('true') ftp.login('ユーザー名','パスワード') ftp.cwd('/aaa/') f = open(filename,'rb') ftp.storbinary('STOR ' + filename,f) now = datetime.datetime.now() fm = now.strftime("%Y%m%d") +".csv" ftp_upload(fm)
cronではなく、手動で実行するとどうなりますか?
エラーが出ている/home/pi/adxl345-Python/example.pyとcrontabに設定している/home/pi/adxl345-Python/df/ftp up.pyのファイル名が同じでないのですが、どちらが実行したいプログラムでしょうか。
/home/pi/adxl345-Python/df/ftp up.pyが設定しているものなのであればftp up.pyの間に( )スペースが入っているのでエラーになっていると見受けられます、_(アンダーバー)などに変更して状況がどうなるかご確認ください。
@yasutakatouさん
> ftp up.pyの間に( )スペースが入っているのでエラーになっていると見受けられます、
crontab では普通にコマンドラインを入力するように、つまりスペースがコマンドライン中に入っていても問題は無いです。ただ、"_"など別の文字列に変えて状況が変わるかどうかの確認は、解決のヒントになるかもしれないので同意します。
@質問者さん
crontab -l で登録した内容を出力し、正しく登録しているか再度確認してみてください。
example.py は、別の、例えば過去とか別のアカウントのログを見ていたということはないですか。
@tanatさん
手動で実行すると問題無く動作します!
一応プログラム内容はcsvファイルの最初のデータを別のパソコンに転送し保存するといったものです。
@yasutakatouさん
見づらくしてすいませんでした。
一応動作させたいのは/home/pi/adxl345-Python/df/ftp up3.pyほうです!
"_"に変更しましたがダメでした、、
@dodox86さん
正しく登録とは入れた内容が反映されていればいいのでしょうか??
一応、crontab -l 確認すると
*/1 * * * * /usr/bin/python3 /home/pi/adxl345-Python/df/ftp_up3.py
となっています!
私へのコメントではないですが一応、
> "_"に変更しましたがダメでした
むしろダメであることの確認だったと思います。もとに戻してよいのではないでしょうか。
ログでは"python3 /home/pi/adxl345-Python/example.py" と出ているのに、crontab では
"/usr/bin/python3 /home/pi/adxl345-Python/df/ftp up.py
と指定しています。ログがおかしいです。更に、
/usr/bin/python3 これはpython3インタプリタ
/home/pi/adxl345-Python/df/ftp これは何者ですか?
up.py これは何者ですか?どのPATH(ディレクトリ)に存在しますか?これをフルPATHで指定したらどうでしょうか。
アンダーバーの変更確認ありがとうございました。となるとdodox86さんのおっしゃる通り
①何を動かそうとしているのか
②それぞれのコードなりツールは何か
が分からないですね。/home/pi/adxl345-Python/df/ftpがツールならそもそもプログラミングの質問ではなくなっていきますし。。
/home/pi/adxl345-Python/df/というディレクトリにあるftp_up3.pyパイソンスプリクトを現在、起動したいのですが、一応僕は/home/pi/adxl345-Python/df/これがフルパスだと思っているのですが認識ハズレでしょうか??
エラーのログは現在のに修正しました、、、
記入したタイミングが悪く、古いものをコピーして貼り付けていました。
> 認識ハズレでしょうか??
ちょっと違いますね。
/home/pi/adxl345-Python/df/ ディレクトリ下に存在する ftp_up3.py と言う名前のファイルのフルPATHあるいは絶対PATHは、
/home/pi/adxl345-Python/df/ftp_up3.py
です。要は、ディレクトリあるいはファイルのPATHを略せず、相対的でもなく示すPATHを通常は「フルPATH」あるいは「絶対PATH」と言います。
とすると、絶対PATHはあっているがその前のインタプリタが不要で上手くいっていないのでしょうか??
話が混乱しています。元に戻って、最初、質問に提示したcrontab への登録内容は以下、です。
> */1 * * * * /usr/bin/python3 /home/pi/adxl345-Python/df/ftp up.py
"ftp" up.py"との間はスペースで分かれています。で、質問文中の次の行には
> (ftp up3.pyのプログラムは正常に動作しています。)
と記載されています。 "ftp up3.py" と、"up3.py"が突如出現してます。更にスペースで分かれていますが、ftp_up3.pyが正しいのですか? 最初の質問への記載内容が間違っていたということでしょうか。
一応 crontab -e には
*/1 * * * * /usr/bin/python3 /home/pi/adxl345-Python/df/ftp_up3.py
で記入しています。
当初の質問と別の問題になっている、ということを言っています。
記載内容が間違っていて、ftp_up3.pyが正しいです。
> 一応プログラム内容はcsvファイルの最初のデータを別のパソコンに転送し保存するといったものです。
プログラム中の、csvファイルも絶対パスで書いていますか?
そもそも正常終了に見えてpyhtonが終了時にexit 1を返している可能性も無くは無いですね。
できれば該当のコードをアップするようお願いします。難しければ
https://dalomo.net/blog/2019/07/17/575/
こちらにあるようにログを取ってcronを実施するようお願いします。
ftp_up3.pyのコード追記しました。
csvファイルを相対パスで開いているので、そこでエラーになっている可能性が高いです。
絶対パスで開くようにするか、想定しているディレクトリにchdirするようにしないといけません。
bsdfanさんのご回答に一票です!試してみてくださいな
回答ありがとうございます!
いじるのはcrontabの方ですか??
もしくはスプリクトのコードの方ですか??
どこをどのようにいじればいけますでしょうか??
コードの方ですね。
now.strftime("%Y%m%d") +".csv"
を絶対パスに書き換えてみてはいかがでしょうか。now.strftime("%Y%m%d") +".csv"の前に
"/home/pi/adxl345-Python/df/" + みたいに絶対パスを追記します。
ありがとうございます。いまからやってみます!!
お手数ですが試して見てください。一点、絶対パスは必ずcsvがある場所を指定してください。
私が書いたのはあくまで例なのでここにcsvが無いとエラーが解消できませんよー
>@質問者さん
[2020/10/22 09:21]のコメントより
> どこをどのようにいじればいけますでしょうか??
恐らくコメントしている私を含む方々は、質問者であるvieraさんがpython3と当該スクリプトの内容を理解している前提で対応しているのだと思いますが、その辺りの認識は合っていますでしょうか。os特有、cron特有の問題に遭遇していて、質問中の不明点を明らかにすべく皆さんコメントしていると思うのですけど。
もしそうでなければ、本来、回答も少々変わってくるはずです。話は進んでいるようなので私は以降、コメントするのは控えますが。
@yasutatouさん コードも絶対パスにしないといけないということをもとに調べたら転送できるようになりました!ありがとうございます!
@みなさま
お手数おかけしました。
知識不足でご迷惑おかけしましたが無事できました!
ありがとうございました!
無事解決して良かったですね!!
bsdfanさんか、dodox86さんが回答書かれると思うのでベストアンサーを入れてあげてくださいねー
いえ、私は途中まで質問の不足を補った程度なので、回答は書かないです。
あなたの回答
tips
プレビュー