CentOSのsystemdサービス

CentOSのsystemdサービス

Pythonコードはバイナリファイルとして存在します。

バイナリは/bin/test_serviceにあります。

test_serviceというサービスもあります。

[Unit]
Description=TestService
After=network.target

[Service]
Type=forking
ExecStartPost=/bin/sh -c 'umask 022; pgrep test_service > /run/test_service.pid'
PIDFile=/run/test_service.pid
OOMScoreAdjust=-100
ExecStart=/bin/test_service --start   
KillMode=control-group

Restart=always
RestartSec=10

[Install] 
WantedBy=multi-user.target

このサービスを実行するには、次の手順を実行します。

systemctl daemon-reload
systemctl enable test_service
systemctl start test_service

しかし、エラーが発生しました:(sudojournalctl-xe)

centos test_service[4234]: [4235] Failed to execute script 
centos test_service[4234]: Traceback (most recent call last):
centos test_service[4234]: File "test_service/run.py", line 21, in main
centos test_service[4234]: File "test_service/run.py", line 61, in create_app_directory
centos test_service[4234]: File "os.py", line 220, in makedirs
centos test_service[4234]: PermissionError: [Errno 13] Permission denied: '/opt/test_service/'

私のPythonコードの先頭には、どのユーザーがスクリプトを実行しているかを確認する行があります。その後、いくつかのファイルとフォルダを作成しようとしていますが、その1つは/opt/test_service/です。

if os.geteuid() != 0:
    raise Exception("failed: should be root")

os.makedir("/opt/test_service/")

その結果、次のエラーが発生しました。

Permission denied: '/opt/test_service/'

代わりに、次のコマンドを実行すると、すべてが正常です。

/bin/sudo /bin/test_service --start 

Ubuntu / Debian / SUSEでも同じサービスがうまく動作します。

この問題を解決するのに役立ちますか?

私が知っているのは、サービスもルート権限で実行し、バイナリもルート権限で実行する必要がありますが、何か間違っています...

CentOS 7で最近このサービスをテストしましたが、すべてが問題ありませんでしたが、CentOS 8.1では問題が発生しました。

ベストアンサー1

答えは結局見つけました。これが最善の決定であるかどうかはわかりませんが、問題は消えました。

ファイルを編集しました。

 /etc/selinux/config

から:

 SELINUX=enforcing

到着する:

 SELINUX=disabled

サーバーの再起動(CentOS 8.1)

@annahriが述べたように、このアプローチは不適切です。

正しい権限でサービスを実行するために、SELinux の要件を満たすように一部のファイルとフォルダのコンテキストを変更しました。

chcon -R system_u:object_r:bin_t:s0 /bin/test_service
chcon -R system_u:object_r:bin_t:s0 /opt/test_service

おすすめ記事