2015-02-24 11 views
1

Я дал задачу написать файл unitd для приложения twistd для python и создать его rpm. Приложение является открытым исходным кодом, и вы можете найти его here.документ systemd unit file и specfile для приложения twistd для python

Я написал файл устройства, как:

[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 

Я написал rpmbuild в качестве файла спецификации:

%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 script и cron job, который его использует. вы можете найти их, используя ссылки.

Можно ли их удалить? если да, то как?

Я делаю это хорошо? Как я могу сделать это лучше? любой указатель и предложение будут высоко оценены.

ответ

0

Нет смысла использовать PIDFile в вашем служебном файле, поскольку вы используете тип как простой.

PIDFile только полезно, когда ваш тип службы разветвлением (следующим образом):

[Service] 
Type=forking