2014年1月13日月曜日

Linuxのatコマンド

Linuxで指定した時刻にJobを実行する方法として、cron意外にatコマンドが存在します。

細かい書式はITProを見ていただくとして、時間指定は時刻だけでなく、今からx分後、と言った指定もできます。
また、atコマンドをそのまま利用すると、標準入力でコマンドを書き込むモードになりますが、下記のようにするとファイルの内容をコマンドとして設定できます。
$cat testCommand
ls
$at now+5minutes < ./testCommand

2014年1月12日日曜日

Pythonで作成したスクリプトをdaemon化する Ubuntu 12.04 - 14.04

Ubuntu 12.04以降(2015年2月時点で14.04までOK)でPythonで作成したスクリプトをdaemon化する場合、upstartに任せてしまうのが便利です。
サンプルはここに置きました。

参考:http://heartbeats.jp/hbblog/2013/02/upstart-daemon.html

なお、upstartを利用しているディストリビューションでも、設定ファイルをインストールするフォルダが異なることがあるようなので、Ubuntu以外を利用している人は設定ファイルの保存先を変更してください。

upstart

Ubuntuではサービスの起動にupstartを利用できるようになっています。
upstartでサービスの起動を行う場合、以下のようなファイルを/etc/init以下に保存し、「/sbin/initctl reload-configuration」で設定を再読み込みします。

#/etc/init/python_daemon_example.conf

description "python daemon example"
author  "ccat"

start on runlevel [2345]
stop on runlevel [016]

chdir /usr/local/python_daemon_example
exec python daemon.py
respawn
cp ./python_daemon_example.conf /etc/init/python_daemon_example.conf
/sbin/initctl reload-configuration

2013年12月16日月曜日

PIL/PillowをUbuntu 12.04 64bitのvirtualenvへインストールする

はじめに

先日、django-wikiを使ってみようと思ったところ、依存関係のあるPIL/Pillowのインストールに少し手間取りました。そこで、PIL/PillowをUbuntu 12.04 64bit版のvirtualenv環境へインストールする方法を記録しておきます。

インストール方法

virtualenv自身のインストールも含め、下記に記載しました。なお、virtualenvで./envディレクトリにpython環境を構築することを前提としています。
sudo apt-get install python-virtualenv #virtualenvパッケージをインストール
virtualenv ./env #python環境を./envに作成
sudo apt-get install libjpeg8 libjpeg8-dev libpng12-0 libpng12-dev python-dev #PIL/Pillowに必要なパッケージをインストール
source ./env/bin/activate # virtualenvの環境を有効化
pip install pillow # or "pip install PIL".  pillowかPILをインストール

以上でインストール終了です。簡単ですね。

なお、libpngやlibjpegの後ろについている数字は比較的よく変更されるため、すぐ上記ではインストールできなくなる可能性があります。libpngやlibjpegのインストールでエラーが発生した場合、"apt-cache search libpng"や "apt-cache search libjpeg"でパッケージの後ろの数字を確認しましょう。

2013年12月15日日曜日

AWS上のmicroタイプのUbuntuでswapを利用する

はじめに

AWSで無料で利用できるmicroタイプのUbuntu 12.04 LTS(おそらくは他のLinuxでも)には、Swapが設定されていない。そのため、メモリ使用量の大きいアプリケーションを実行すると、メモリ不足でアプリケーションは落ちてしまう。
$ free -k
             total       used       free     shared    buffers     cached
Mem:        604340     587692      16648          0      44980     375884
-/+ buffers/cache:     166828     437512
Swap:            0          0          0

このままでは不便なので、swapファイルを作成する。

Swapファイルの作成

Swapファイルのサイズだが、実メモリの2倍程度が良いとされているので、1208680KB(約1.2GB)のSwapファイルを作成し、マウントする。
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1208680 #中身が0で埋め尽くされた約1.2GBのファイル作成
sudo mkswap /swapfile #作成したファイルをSwapファイルに変換
sudo swapon /swapfile #作成したSwapファイルをマウント
sudo cp /etc/fstab /etc/fstab.old
sudo sh -c 'echo "/swapfile  swap   swap    defaults   0 0" >> /etc/fstab' #fstabに設定し、自動マウントする

以上でSwapファイルが作成され、マウントされた。また、/etc/fstabにSwapファイルの設定を行ったため、再起動してもSwapファイルはマウントされたままとなる。
free -k
             total       used       free     shared    buffers     cached
Mem:        604340     178708     425632          0       9812      46968
-/+ buffers/cache:     121928     482412
Swap:      1208676          0    1208676