기본 upstart 스크립트를 systemd로 마이그레이션


17

방금 Ubuntu 14.10에서 15.04로 서버를 업그레이드했으며 사용자 정의 시작 스크립트를 통해 시작하는 몇 가지 서비스가 더 이상 실행되지 않습니다.

내 이해는 systemd서비스 로 다시 작성해야 하지만 systemd밤새 전체 시스템 을 학습한다는 생각은 약간 어렵다.

upstart 스크립트 autossh는 시작할 때 간단하게 시작 되며 장기 실행 프로세스를 시작하는 다른 유사한 스크립트가 있습니다.

#/etc/init/autossh.conf

description "Maintain a permanent SSH tunnel to <other_server>"

start on started mountall
stop on shutdown

exec autossh -N other_server

이것을 systemd서비스 로 다시 작성할 수 있습니까?


3
Upstart 사용자 를위한 시스템은 좋은 출발점입니다.
muru

답변:


13

systemd로 마이그레이션하기위한 첫 번째 규칙

이 시점에서 2015 년에는 누군가 이미 그것을했을 가능성이 큽니다.

systemd는 몇 년 동안 사용되었습니다. 그리고 단위 파일을 작성하고 출판하는 사람들로 구성된 코티지 산업이 있습니다. 특히 GitHub는 서비스 유닛 컬렉션의 리포지토리를 끌어들이는 것 같습니다.

실제로 단순히 WWW를 autossh.service(구문으로) 검색하면 나타납니다.

템플릿 단위

즉, StackExchange의 여러 곳에서만 지적했듯이 이러한 종류의 마이그레이션은 기계적인 프로세스가 아니며 때로는 어떤 것이든지 단위 파일로 로봇에서 번역하는 것이 잘못되거나 적어도 제대로 수행하지 못하는 것입니다. 이 경우 템플릿 단위autossh 로 처리되도록 긍정 이동 하여 대상 이름으로 매개 변수화 된 실제 서비스 단위로 인스턴스화됩니다. 따라서 다음과 같이하십시오 ./etc/systemd/system/autossh@.service

[단위]
Description = % i의 역방향 터널에 대한 AutoSSH 서비스 
이후 = network.target

[서비스]
사용자 = autossh
EnvironmentFile = / etc / % p / % i.conf
ExecStart = / usr / bin / autossh -M 0 -q -N $ SSH_USER @ % i $ SSH_OPTIONS

[설치]
WantedBy = 다중 사용자. 대상

/etc/autossh/other_server.example.conf최소한으로 이름이 지정된 파일을 작성하십시오 .

SSH_USER = joe

그런 다음 모든 일반적인 컨트롤이 적용됩니다.

  • systemctl enable autossh@other_server.example — 부트 스트랩에서 인스턴스가 자동으로 시작되도록합니다.
  • systemctl start autossh@other_server.example — 해당 인스턴스를 즉시 수동으로 시작하십시오.
  • systemctl status autossh@other_server.example — 상태를 확인하십시오.

그리고 네, 첫 번째 규칙은 이것에도 적용됩니다. 검색하면 OpenSUSE의 Greg Freemyer가 2 주일 만에 내가 이겼다는 것을 알 수 있습니다.


감사합니다-나는 비슷한 것을 생각해 냈지만 '템플릿 단위'라는 아이디어를 알지 못했습니다
trvrm

@ JdeBP 나는 또한 비슷한 질문이 있습니다 . 당신이 나를 도울 수 있는지보고 싶었습니다.
user1950349
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.