LoginSignup
1
0

More than 1 year has passed since last update.

CentOS7でpythonをdaemon化してみた

Last updated at Posted at 2022-08-28

最近某ドラマで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ファイル作成から・・・

daemon_ts.py
#!/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ファイル作成

daemon_st.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の中身の確認
になります。

以下のようになっていればdaemon起動成功です
Image.png

↑ 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にて取り組みました)

最後までご閲覧ありがとうございました!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0