最近某ドラマでdaemonという言葉を知った。
名前からして興味が湧いたため(小並感)CentOSでやってみることにした
◆そもそもdaemonとは?
UNIX系のOSでバックグラウンドで常駐し動作している(動作できるように待機している)プログラム。
内容にもよりますが、自動化させたいシステムがあればdaemon化すると何かと便利かもしれません。
今回は3秒事に現在時刻を取得し、それをtextに保存するpythonをdaemon化してみます。
[環境]
CentOS7(virtualBOX)
rootユーザー(daemon作成できればそれでいいや!と思いrootで操作します🍞
(一般ユーザーの場合はところどころroot権限が必要な点があるのでsudo等活用ください)
やってみる!
◆python環境構築
python3をインストール
# yum install python3
install後、pythonがinstallされていることを-Vオプションにて確認。
# python3 -V
-> Python 3.6.8
◆作業場所確保
今回/workPlaceというディレクトリで作業します。
# mkdir /workPlace && cd /workPlace
この/workPlaceにviコマンドなどで
1.daemon_ts.py
2.daemon_st.service
ファイルを作成します。
◆python, serviceファイル作成
まずはpythonファイル作成から・・・
#!/bin/python3
#↑シェバンも忘れずに!/bin/python3を使ってこのpythonを実行するように
#シェバンを記述しておきます。(# which python3 の出力結果をシェバンに記述しました)
#この度利用する標準ライブラリをimport
import time
import datetime
path = '/workPlace'
#無限ループ作成
while True:
now_time = datetime.datetime.now() #現在日時取得
#workPlace配下にLog.txtを作成。また'a'モードによりtxtを上書きしていく。
with open(path + '/Log.txt', 'a') as f:
#以下現在日時をtxtに記述していく
f.write("Hello! Current Time : " + str(now_time) + "\n")
#一連の動作が終えたら3秒pythonをsleep(一時停止)する
time.sleep(3)
daemon_ts.pyに権限付与
# chmod 755 daemon_ts.py
↑ これ忘れるとdaemon動作しないので重要!です
◆serviceファイル作成
[Unit]
Description = hello daemon #任意の内容で大丈夫です。systemctl statusとかで表示されます。
[Service]
ExecStart = /workPlace/daemon_ts.py #daemon起動時に実行するスクリプトの絶対パスを記述。
Restart = always
Type = simple
[Install]
WantedBy = multi-user.target
serviceファイルを以下にコピー。
# cp daemon_st.service /etc/systemd/system
systemディレクトリに移動
(ディレクトリ移動しなくともよいですが、enable時、ファイル名をtab保管しやすいので移動します)
# cd /etc/systemd/system
◆daemon起動!
# systemctl enable daemon_st.service
# systemctl start daemon_st.service
# systemctl status daemon_st.service
# cat /workPlace/Log.txt
コマンド説明補足。上から
1.daemon自動起動有効
2.daemon開始
3.daemonの状態確認
4.Log.txtの中身の確認
になります。
↑ 3秒ごとの現在日時を取得するpythonがちゃんと仕事していることがわかる
◆daemon停止、後始末
# systemctl stop daemon_st.service
# systemctl disable daemon_st.service
# rm -f daemon_st.service
# systemctl daemon-reload
コマンド説明補足。上から
1.daemon停止
2.daemon自動起動無効
3.serviceファイル削除
4.設定ファイルの再読み込み
になります
以上です!
今回virtualBOXにてdaemon化を取り組みましたが
dockerでも実現可能だったりするので
よければお試しください〜!(ちなみにdockerではOSをdebianにて取り組みました)
最後までご閲覧ありがとうございました!