シン・クラウド for FreeのCronを使って定期実行してみた!

定期的にあるurlにアクセスするようにCronを使ってみた。
Cronとは、定期的にコマンドやスクリプトを実行するためのプログラムです。
無料のシン・クラウド for Freeの場合、設定画面が用意されているので実行する時間とコマンドを簡単に設定できます。
目的は私が作ったStreamlit Cloudのアプリがアクセスがなさすぎるとフリーズしてしまうため
フリーズしないようにCronを使って定期的にアクセスしてやろうと思いました。

Streamlitでいろいろ作った!(pandas、API、CSV、scikit-learnなど利用)
StreamlitはPythonで作ったものを比較的簡単にWebで公開できます。どんなものが作れるかご紹介です。私が思う限界も指摘しておきます。作ったアプリは1、2つのAPIにrequestsで送受信して声の出る天気予報アプリ。ずんだもんの

しかし結果はアクセスはするものの本来の目的は達成できませんでした。
恐らくStreamlit CloudはCronなどプログラムでアクセスに対して対策されているものと思われます。
目的は達成できませんでしたが、自分が作った掲示板に定期的に書き込むことは成功したので、その件も併せて紹介します。
イチゲブログ掲示板【シン・クラウド for Free】(CSV)
シン・クラウド for Freeについてはこちら↓↓↓↓を参照してください。

シン・クラウド for Freeを使ってみた!
2023/10/3「XFREE」が「シン・クラウド for Free」のリリースに伴い、新規受付を終了しました。新規受付を終了なので今まで作ったものは残っていそうです。取り合えずシン・クラウド for Freeを使ってみました。ドメインを取

シン・クラウド for FreeのCronの使い方

サーバーパネルにログインします。
使い方は公式のCron設定に書いてあります。
下は実際に設定したものだが、毎時間25分になったらhttps://percenten-bpejpwmjycozvhy8lfdxce.streamlit.app/(Streamlitの私が作ったアプリ)にアクセスする。

Streamlitにアクセスできたが、うまくいってない

Cron結果の通知アドレスにメールアドレスを設定するとCronが実行された後、
結果がメールで送られてくる。

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   141  100   141    0     0    260      0 --:--:-- --:--:-- --:--:--   342
100   141  100   141    0     0    260      0 --:--:-- --:--:-- --:--:--   342
<a href="https://share.streamlit.io/-/auth/app?redirect_uri=https://percenten-bpejpwmjycozvhy8lfdxce.streamlit.app/">See Other</a>.

これはCronでアクセスしたとき実際の表示は下のようになって、
See Otherをクリックしないと本来アクセスしたいところにアクセスしたことにならないのかもしれない。

See Other

というのもこのアプリはアクセスカウンタを入れているがCronが実行されてもアクセスカウンタが増加していない。
このアクセスカウンタは同一アドレスで連続クリックしても増加しないようになっているが、
Cronによるアクセスはシン・クラウド for FreeのサーバーIPからのアクセスなので
別IPからのアクセスとしてカウントアップするはずである。

Geminiに聞いた
「私のサイトのアクセスがcronによるアクセスか判断する方法は?」
Geminiの答え:
cronによるアクセスかどうかを判断するには、いくつかの方法があります。
1. リクエストヘッダーを確認する
cronジョブから実行されるスクリプトは、リクエストヘッダーにUser-Agentフィールドを含めることが一般的です。このフィールドには、リクエスト送信元のソフトウェアに関する情報が含まれます。多くの場合、cronジョブはcurlwgetなどのコマンドラインツールを使用して実行されるため、User-Agentフィールドにはこれらのツールの名前とバージョンが含まれます。
User-Agent: curl/7.74.0 (x86_64-pc-linux-gnu) libcurl/7.74.0 OpenSSL/1.1.1l zlib/1.2.11

ということなのでUser-Agentが例えばcurlかどうかで判断してるかも。
目次へ

JupiterNotebookで実験

CronではなくパソコンでJupiterNotebookでプログラムを書いてアクセスしてみるとエラーになる。

プログラム
import urllib.request

with urllib.request.urlopen('https://percenten-bpejpwmjycozvhy8lfdxce.streamlit.app/') as response:
    html = response.read()
    print(html)

実行すると
HTTPError: HTTP Error 303: The HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
See Other

このプログラムでアクセスすると同じところにリダイレクトされ無限ループになって先に進めないようです。
恐らくこういうサイトはプログラムでアクセスされないように対策されていると思われます。
うまく回避する方法があるかもしれないが、今回はここまでにします。
目次へ

掲示板にCronから書き込んでみる

自分で作ったイチゲブログ掲示板【シン・クラウド for Free】(CSV)にCronから書き込んでみました。

urlパラメータが英数のみの場合

この方法は、たまたま私が作った掲示板でうまくいっただけなので万能ではありません。
今回うまくいったコマンドはurlの後ろにurlパラメータを付けてcurlします。
urlパラメータは、掲示板の「各入力欄のname属性=書き込む内容」でOKでした。
入力欄は2つあるので&でつなげます。
curlのあとは’’で囲まないと?以降(urlパラメータ)の部分が実行されません。
実行されているかどうかはCronの実行結果が送られてくるメールの題名で判別できます。
’’付けないと題名で?から後ろが消えてました。
+は半角スペースです。

curl 'https://cf193110.cloudfree.jp/python/keijisfcsv.py?user_name=Cron+scheduled+execution&toukou=Success'

目次へ

urlパラメータが日本語の場合

urlパラメータが日本語の場合は厄介です。コマンドは以下に変わります。
ブラウザのアドレスバーから同じことを実行するときは
https://cf193110.cloudfree.jp/python/keijisfcsv.py?user_name=Cron定期実行&toukou=成功
になりますが、curlコマンドだと以下になります。参考 curl コマンド 使い方メモ

curl -w '\n' 'https://cf193110.cloudfree.jp/python/keijisfcsv.py' --data 'user_name=Cron\%E5\%AE\%9A\%E6\%9C\%9F\%E5\%AE\%9F\%E8\%A1\%8C&toukou=\%E6\%88\%90\%E5\%8A\%9F'


urlパラメータの日本語は%エンコードします。
さらに%の前には¥を付けて%をエスケープしないとうまくいきません。

日本語を%エンコードする方法
ブラウザのアドレスバーに日本語のurlパラメータ付きurlを書きます。https://cf193110.cloudfree.jp/python/keijisfcsv.py?user_name=Cron定期実行&toukou=成功
それをコピーしてメモ帳に貼り付けると日本語部分が%エンコードされます。
ポイントはブラウザのアドレスバー以外で書いたものをメモ帳に貼り付けても、日本語のまま貼りつきます。
なので必ずブラウザのアドレスバーで作るようにしてください。
【Python】日本語のURL表示がおかしいときの対策【URLエンコード】
日本語を含んだURLをメモ帳などに貼り付けてもわかりますが日本語の部分が%〇~に変換されてます。原因はURLエンコード されているからです。URLエンコード(パーセントエンコーディング) とは何かの解説とPythonで日本語表示に直すやり方

まとめ

シン・クラウド for Freeだと簡単にCron設定、実行できます。
パソコン立ち上げなくていいですが
定期実行する対象によっては想定したことを実行するのは難しいと思います。
そういうのはパソコンでプログラムを作って
パソコンでそのプログラムを定期実行させた方がいいと思います。
目次へ
イチゲをOFUSEで応援する(御質問でもOKです)Vプリカでのお支払いがおすすめです。
MENTAやってます(ichige)

タイトルとURLをコピーしました