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 代码的开头有一行用于检查哪个用户运行脚本。之后我尝试创建一些文件和文件夹,其中之一是 /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 下运行良好...

你能帮我解决这个问题吗?

据我了解,服务以 root 权限运行,二进制文件也应该以 root 权限执行,但出了问题......

最近我在 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

相关内容