首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为python twistd应用程序编写systemd单元文件和specfile

为python twistd应用程序编写systemd单元文件和specfile
EN

Stack Overflow用户
提问于 2015-02-24 15:58:11
回答 1查看 2.9K关注 0票数 1

我给了一个任务,为python应用程序编写systemd单元文件并创建它的rpm。应用程序是开源的,您可以找到它这里

我已将单位档案写成:

代码语言:javascript
复制
[Unit]
Description=ECManaged Agent for monitoring and deployment
[Service]
Type=simple
PIDFile=/opt/ecmanaged/ecagent/twistd.pid
#ExecStart=/usr/bin/twistd -y /opt/ecmanaged/ecagent/ecagentd.tac
ExecStart=\
/bin/twistd \
--nodaemon \
--pidfile=/opt/ecmanaged/ecagent/twistd.pid \
--no_save \
--python=/opt/ecmanaged/ecagent/ecagentd.tac
WorkingDirectory=/opt/ecmanaged/ecagent
[Install]
WantedBy=multi-user.target

我已经将写成:

代码语言:javascript
复制
%define name      ecmanaged-ecagent
%define ename     ecagentd
%define pname     ecmanaged

Name:           %{name}
Version:        2.1.2       
Release:        109%{?el#}
Summary:        ECManaged  Agent - Monitoring and deployment agent
Group:          Applications/System
License:        GPLv3+
URL:            www.ecmanaged.com
Source0:        ecmanaged-ecagent.tar.gz
BuildArch:      noarch

Requires:       python2
Requires:       python-twisted-core
Requires:       python-twisted-web
Requires:       python-protocols
Requires:       python-configobj
Requires:       python-twisted-words
Requires:       python-psutil
Requires:       libxml2-python
Requires:       python-simplejson
Requires:       rpm-python
Requires:       python-crypto
Requires:       python-httplib2

BuildRequires:      systemd

Provides:       ecmanaged-ecagent

%description
ECManaged  Agent - Monitoring and deployment agent

%prep
%setup -qn %{name}

%build


%install

rm -rf %{buildroot}

mkdir -p %{buildroot}/opt//ecmanaged/ecagent
mkdir -p %{buildroot}/etc
mkdir -p %{buildroot}/etc/rc.d/init.d
mkdir -p %{buildroot}/etc/cron.d
mkdir -p %{buildroot}%{_unitdir}/

rsync -av --exclude '*build*' %{_builddir}/%{name}/* %{buildroot}/opt/ecmanaged/ecagent/
install -m 750 %{_builddir}/%{name}/build/redhat/etc/init.d/ecagentd %{buildroot}/etc/rc.d/init.d
install -m 644 %{_builddir}/%{name}/build/redhat/etc/cron.d/ecmanaged-ecagent $RPM_BUILD_ROOT/etc/cron.d

cp %{_builddir}/%{name}/build/redhat/etc/systemd/system/ecagentd.service %{buildroot}%{_unitdir}/


rm -rf %{_builddir}/%{name}/build

%clean
#rm -rf %{_buildroot}%{name}
#rm -rf %{_source_path}%{name}

%post
systemctl daemon-reload
systemctl enable ecagentd.service
systemctl daemon-reload
systemctl start ecagentd.service >/dev/null 2>&1

%preun
systemctl stop ecagentd.service >/dev/null 2>&1
systemctl disable ecagentd.service
systemctl daemon-reload

%files
%defattr(-,root,root,-)
%attr(750,root,root) /etc/rc.d/init.d/ecagentd
%attr(750,root,root) /usr/lib/systemd/system/ecagentd.service
%attr(644,root,root) /etc/cron.d/ecmanaged-ecagent
%attr(755,root,root) /opt/ecmanaged/ecagent/
%attr(700,root,root) %config /opt/ecmanaged/ecagent/config
%attr(400,root,root) %config /opt/ecmanaged/ecagent/config/ecagent.init.cfg
%exclude /opt/ecmanaged/ecagent/plugins/*.pyc
%exclude /opt/ecmanaged/ecagent/plugins/*.pyo
%exclude /opt/ecmanaged/ecagent/examples/*.pyc
%exclude /opt/ecmanaged/ecagent/examples/*.pyo
%exclude /opt/ecmanaged/ecagent/ecagent/*.pyc
%exclude /opt/ecmanaged/ecagent/ecagent/*.pyo
%exclude /opt/ecmanaged/ecagent/ecagent/*.pyc
%exclude /opt/ecmanaged/ecagent/ecagent/*.pyo

%changelog

我知道应用程序不使用setuptools有点奇怪。

他们也有一个init.d脚本和一个使用它的cron作业。你可以通过链接找到他们。

它们安全吗?如果是,怎么做?

我做得好吗?我怎样才能让它变得更好?任何指针和建议都将受到高度赞赏。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-02 13:04:12

在服务文件中使用PIDFile是没有意义的,因为您使用的类型非常简单。

只有当您的服务类型是分叉时,PIDFile才有用(如下所示):

代码语言:javascript
复制
[Service]
Type=forking
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28700436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档