こんにちは、しらすです。
最近Pythonでコード作成の依頼をいただくことが多くなってきたのですが、納品させていただいたPythonを定期実行したいという追加依頼をいただく機会が多くなってきたので、サーバー上でPythonを実行する方法について調べてみました。
簡単にやろうと思えば、PCを常時ONにしておいて定期的に実行するようにしておけば済むかもしれません。ただ、私のようにノートパソコンしかなく持ち歩く人にとってはそれはなかなか難しい、ということでサーバーにPythonを設置して定期実行しよう!ということでやってみました。
※今回は準備編です(私には一度で定期実行まで構築する力はなかった。。。)
サーバーでPythonを動かせた!定期実行が見えてきた!というところまでです。
この記事で書いていること
- サーバー上でPythonを実行する方法(単発)
- 作成したPythonファイルをサーバーに置く方法
環境準備編
まずは必要なツールのダウンロードを行ってください。どちらもフリーソフトになります。また、実行環境については以下の環境を前提として進めます。
必要なツール
- Teraterm:WindowsPCからXserverへ接続してコマンドを実行するためのツール
- WinSCP:WindowsPCからXserverへ接続してファイルを送受信するためのツール
実行環境
- Windows10
- Xserver (X10)
- Teraterm (4.105)
- WinSCP (5.17.9)
Teratermの接続設定
まずはWindowsPCからXserverへコマンドを送信するために、Teratermの接続設定をしていきます。以下2つの作業を行いましょう。
- Xserver側でSSH認証鍵を作成する
- Teratermに認証鍵を設定する
Xserver側でSSH認証鍵を作成する
こちらのXserver公式手順に従って設定します。
「SSH接続の有効化・無効化」と「公開鍵認証用鍵ペアの生成、公開鍵の登録」の2つを行いましょう。
Teratermに認証鍵を設定する
Teratermを立ち上げて接続を開始します。こちらに接続方法の記載があるので手順通り進めましょう。
Teratermが以下のようになれば接続完了です。
Last login: Sat Dec xx xx:xx:xx 2020 from xxx.xxxx.xxx.x..ne.jp
[[サーバーID]@svXXXX ~]$
WinSCPの接続設定
次はWindowsPCからXserverへファイルを送信するために、WinSCPの接続設定をしていきます。以下の作業を行います。
- WinSCPに秘密鍵を設定する(.keyから.ppkに変換する)
WinSCPに秘密鍵を設定する
WinSCPを立ち上げましょう。するとログインという画面が出てくるかと思いますので、先ほどのTeratermと同様に入力します。
- ホスト名:サーバーID.xsrv.jp
- ポート番号:10022
- ユーザー名:サーバーID
- パスワード:秘密鍵作成時に設定したパスワード
入力出来たら「設定」をクリックします
秘密鍵の設定が開くので先ほど作成した秘密鍵を選択します(WinSCP用に秘密鍵をPuTTYという形式に変換する必要があります。ポップアップが出たらOKして進めましょう)
パスフレーズを設定したら、新しく.ppk形式のファイルが生成されたかと思います。こちらの.ppkが秘密鍵と設定されていることを確認してOKを押して設定を閉じましょう。
「保存」をクリックしておくと接続情報が保存されるので、問題ない方は接続情報を保存しておくと便利です。
サーバー上で実行する
接続が完了したらサーバー上にPythonファイルを設置し、実行してみましょう。以下の2つを行います。
- WinSCPでPythonファイルをサーバーに設置
- TeratermからPythonを実行
WinSCPでPythonファイルをサーバーに設置
WinSCPでアクセスするとフォルダの生成やファイルのアップロードがGUIで簡単にできます。お好きな場所にPythonファイルを置いてみましょう。
今回はテストで以下のtest_python.pyを作成してサーバー上に設置しました。
print("hello")
TeratermからPythonを実行
Teratermでアクセスし、pythonコマンドから実行してみましょう。
無事「hello」がアウトプットできています。Teratermを使ってコード実行することでサーバー上で実行できました。
【Tips】 Pythonのバージョンを指定して実行
Xserverにはデフォルトで以下3つのバージョンのPythonがインストールされています。単純に「Python」をコールすると「Python2.7.x」が実行されます。「Python3.4」や「Python3.6」を実行したいときは「Python3.4」や「Python3.6」から始めれば任意のバージョンで実行可能です。
定期実行するためには。。。。
プログラムを定期実行させるには以下の2つの方法が考えられます。Cronを使うのがよさそう。
- Cronで定期的に.pyを実行
- .pyを常時動かし、定期的に中身の処理を実行するようにする
まとめ
とりあえずサーバー上でPythonを実行することができました。ただ以下のような課題がある状態。。。。
- Numpyなどの基本的なライブラリが入っていない(管理者権限がないので色々インストールしたくてもできない)
- SeleniumとChrome driverを入れてスクレイピングを動かしたいが、どうやら上手く動かないらしい。。。
ということで上記の2つを次回はトライしていきたいと思います。とりあえず現時点で調べたところを以下に記載。
課題1に対しては、デフォルトで入っているPython環境を使用するより、仮想環境でPython3を構築した方が色々便利になる模様。
XserverでPython3環境を構築してパッケージを自由にインストールする
課題2に対しては、HerokuというPaaSを使うのが良いらしい。
【Python】Herokuとseleniumを使ってスクレイピングを定期実行する方法
参考
Xserverへ接続する方法についてはこちらを参考にしました。
Xserver上で実行するPythonについてはこちらを参考
SeleniumとWebDriverの設定はこちらを見て断念しました。どうやらChrome のインストールがどうしてもうまくいかな様子
HerokuというPaaSを利用すると簡単に実現できる様子。
コメント