XSERVERのcronを使用してプログラムを定期実行する方法と注意点

XSERVERのcronを使用してプログラムを定期実行する方法と注意点
                 
最終更新日から90日以上経過しています。

XSERVERを使っていて(このブログはXSERVER上にデプロイしています)、今更ながらcron機能が使える事に気付きました。

cronとは、

cronとは、多くのUNIX系OSで標準的に利用される常駐プログラム(デーモン)の一種で、利用者の設定したスケジュールに従って指定されたプログラムを定期的に起動してくれるもの。

参照:IT用語辞典

というもので、Windowsでいうタスクスケジューラのようなものと思って差し支えないでしょう。

今後定期実行するサービス、アプリなどを作る時に使えそうなので、ここにメモしておきます。

使い方

サーバー管理パネルにログインして、実行コマンド、実行日時を登録していきますが、詳細な手順は公式がマニュアルを用意してくれているので、そちらを参照したほうが良いでしょう。

注意点

詳細な手順は上記公式のマニュアルをに沿って進めれば問題ないかと思います。

ここではXSERVERのcronにプログラムを設定し実行したところ、予期しない動作が発生した為、その点について記載しておきたいと思います。

プログラムの実行ディレクトリは、配置したディレクトリではない

例えば、先述の公式マニュアルを元に、sample.pyをPython 3.6で実行する場合、

/usr/bin/python3.6 /home/サーバーID/独自ドメイン名/public_html/sample.py

このような形で実行できます。

この時、実行するsample.py内で相対パスを使用して、

f = open('./out/output.txt', 'w')

このようにしていると、sample.pyと同ディレクトリにoutディレクトリを作成しても、「ディレクトリが存在しない」というエラーになります。

これは、実行ディレクトリがsample.pyの配置ディレクトリではないから。

プログラムの実行パスから、対象ファイルへのパスを生成する

ではどうすれば良いか、というと、

プログラムの実行パスを取得し、そこから対象ファイルへのパスを生成します。

具体的には、先述のコードを、

f = open(os.path.dirname(__file__) + '/out/output.txt', 'w')

このように変えます。

Pythonのos.path.dirname(__file__)で、プログラムの実行パスを取得し、参照したいパスへつなげるイメージです。

IT系の雑記カテゴリの最新記事