2016년 업데이트

2016년 업데이트

그것은 나타난다체계따끈따끈한 신제품이에요내부에블록의 시스템,갑자기 나타나다그것은 몇 년 전이었습니다. 각각의 장점/단점은 무엇입니까? 또한 각 시스템은 다른 초기화 시스템과 어떻게 비교됩니까?

답변1

2016년 업데이트

여기에 있는 답변의 대부분은 5년 전의 것이므로 업데이트할 시간입니다.

Ubuntu는 기본적으로 upstart를 사용했지만 작년에는 systemd를 선호하여 이를 포기했습니다. 다음을 참조하세요.

이래서 좋은 글이 있네요신생 사용자를 위해 시스템화됨Ubuntu wiki - upstart와 systemd 간의 매우 자세한 비교 및 ​​upstart에서 systemd로의 전환 가이드.

(알아채다우분투 위키에 따르면기본적 upstart-sysv으로 sudo update-initramfs -u. )

아래 명령 및 스크립트 섹션에 있는 대부분의 정보는 해당 기사에 사용된 일부 예제에서 수정되었습니다(Stack Exchange 사용자 기여와 마찬가지로 라이선스가 쉽게 부여됨).크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스).

다음은 일반적으로 사용되는 명령과 간단한 스크립트를 빠르게 비교한 것입니다. 자세한 지침은 아래 섹션을 참조하세요. 이 답변은 질문에서 묻는 것처럼 Upstart 기반 시스템의 이전 동작을 systemd 기반 시스템의 새로운 동작과 비교하지만 "Upstart"로 표시된 명령은 반드시 Upstart에만 해당되는 것은 아닙니다. 일반적으로 다음 명령입니다. 시스템화되지 않은 Linux 및 Unix 시스템.

주문하다

su를 실행하세요:

  • 갑자기 나타나다: su
  • 체계: machinectl shell

(아래 "su 명령 대체" 섹션 참조)

실행 화면:

  • 갑자기 나타나다: screen
  • 체계: systemd-run --user --scope screen

(아래의 "예기치 않은 백그라운드 프로세스 종료" 섹션 참조)

tmux를 실행합니다:

  • 갑자기 나타나다: tmux
  • 체계: systemd-run --user --scope tmux

(아래의 "예기치 않은 백그라운드 프로세스 종료" 섹션 참조)

foo 작업 시작:

  • 갑자기 나타나다: start foo
  • 체계: systemctl start foo

작업 중지 foo:

  • 갑자기 나타나다: stop foo
  • 체계: systemctl stop foo

foo 작업 다시 시작:

  • 갑자기 나타나다: restart foo
  • 체계: systemctl restart foo

직위 나열:

  • 갑자기 나타나다: initctl list
  • 체계: systemctl status

작업 foo의 구성을 확인하십시오.

  • 갑자기 나타나다: init-checkconf /etc/init/foo.conf
  • 체계: systemd-analyze verify /lib/systemd/system/foo.service

작업의 환경 변수를 나열합니다.

  • 갑자기 나타나다: initctl list-env
  • 체계: systemctl show-environment

작업의 환경 변수를 설정합니다.

  • 갑자기 나타나다: initctl set-env foo=bar
  • 체계: systemctl set-environment foo=bar

작업의 환경 변수를 삭제합니다.

  • 갑자기 나타나다: initctl unset-env foo
  • 체계: systemctl unset-environment foo

통나무

upstart에서 로그는 /var/log/upstart 디렉터리에 있는 일반 텍스트 파일이므로 평소와 같이 처리할 수 있습니다.

cat /var/log/upstart/foo.log
tail -f /var/log/upstart/foo.log

systemd에서 로그는 텍스트 파일이 아닌 내부 바이너리 형식으로 저장되므로 journalctl로그에 액세스하려면 다음 명령을 사용해야 합니다.

sudo journalctl -u foo
sudo journalctl -u foo -f

스크립트

신생 스크립트에 쓰다 /etc/init/foo.conf:

description "Job that runs the foo daemon"
start on runlevel [2345]
stop on runlevel [016]
env statedir=/var/cache/foo
pre-start exec mkdir -p $statedir
exec /usr/bin/foo-daemon --arg1 "hello world" --statedir $statedir

시스템 스크립트에 쓰다 /lib/systemd/system/foo.service:

[Unit]
Description=Job that runs the foo daemon
Documentation=man:foo(1)
[Service]
Type=forking
Environment=statedir=/var/cache/foo
ExecStartPre=/usr/bin/mkdir -p ${statedir}
ExecStart=/usr/bin/foo-daemon --arg1 "hello world" --statedir ${statedir}
[Install]
WantedBy=multi-user.target

su 명령 대체

풀 요청 #1022에서 명령 대체가 susystemd에 병합되었습니다.

Lennart Petling에 따르면,"su는 실제로 깨진 개념입니다".

그가 설명했다"이전과 마찬가지로 su와 sudo를 사용할 수 있지만,완전히 작동할 것이라고 기대하지 마세요.".

이제 su유사한 동작을 달성하는 공식적인 방법 은 다음과 같습니다.

machinectl shell

이미 더 나아가 레나트 포틀린(Lennart Potlin)이 설명합니다. 문제 #825에 대한 논의에서:

"글쎄, 이것은 오랫동안 논의되었지만 문제는 su가 무엇을 해야 하는지가 명확하지 않다는 것입니다. [...] 간단히 말해서: su는 실제로 깨진 개념입니다. 쉘을 제공합니다. 그리고 그런 용도로 사용해도 괜찮지만, 전체 로그인이 아니므로 오해하면 안 됩니다." - Lennart Petling.

또한보십시오:

백그라운드 프로세스가 예기치 않게 종료되었습니다.

명령은 다음과 같습니다.

더 이상 예상대로 작동하지 않습니다.. 예를 들어 nohup세션에서 로그아웃한 후에도 프로세스가 계속 실행되도록 보장하는 POSIX 명령입니다. 그것더이상 유효하지 않은시스템에. 특별한 방법이나 다른 방법으로 유사한 프로그램을 호출하는 screen것도 필요합니다.tmux함께 실행하는 프로세스가 종료됩니다(이러한 프로세스를 종료하지 않는 것이 일반적으로 screen 또는 tmux를 실행하는 주요 이유입니다.)

이는 버그가 아니지만 신중하게 결정한 사항이므로 향후 수정될 가능성이 낮습니다. 레나르트 포틀린(Lennart Potlin)은 이렇게 말했습니다.설명하다이 문제에 대해:

내가 보기에 UNIX는 기본적으로 로그아웃 후에도 임의의 사용자 코드를 제한 없이 유지할 수 있다는 점에서 실제로 이상한 것 같습니다. 많은 OS 사람들은 이것이 가능해야 한다고 오랫동안 이야기해 왔지만 확실히 기본값은 아닙니다. 그러나 지금까지 누구도 감히 스위치를 켜서 기본값에서 옵션으로 변경하지 못했습니다. 로그아웃한 후 사용자 세션을 정리하지 않는 것은 보기 흉하고 해킹적일 뿐만 아니라 보안 문제이기도 합니다. systemd 230은 이제 마침내 스위치를 켜고 사용자가 로그아웃할 때 모든 것을 적절하게 정리하도록 기본 설정되었습니다.

자세한 내용은 다음을 참조하세요.

높은 수준의 시작 개념

어떤 면에서 systemd는 거꾸로 작동합니다. upstart에서는 작업이 가능한 한 빨리 시작되고 systemd에서는 필요할 때 작업이 시작됩니다. 결국 두 시스템 모두 거의 동일한 순서로 동일한 작업을 시작할 수 있지만 말하자면 반대 방향으로 생각하고 있는 것입니다.

아래와 같은 방법신생 사용자를 위해 시스템화됨설명하다:

갑자기 나타나다프로세스(작업) 시작 모델은 "탐욕스러운 이벤트 기반"입니다. 즉, 시작 이벤트 발생 시 사용 가능한 모든 작업이 가능한 한 빨리 시작됩니다. 시작 프로세스 중에 upstart는 시작 또는 rcS와 같은 일부 초기 이벤트를 초기 서비스가 시작되고 전자가 실행되는 동안 늦은 서비스가 시작되는 "트리 루트"로 합성합니다. 새 작업은 활성화되도록 해당 구성 파일을 /etc/init/에 설치하기만 하면 됩니다.

체계프로세스(유닛) 시작 모델은 "지연 종속성 기반"입니다. 즉, 다른 시작 유닛이 이에 의존하는 경우에만 유닛이 시작됩니다. 시작하는 동안 systemd는 "루트 단위"(grub에서 재정의할 수 있는 default.target)를 시작한 다음 확장을 전달하고 해당 종속성을 시작합니다. 새 장치를 활성화하려면 부팅 시퀀스 장치(일반적으로 multi-user.target)의 종속 항목으로 자신을 추가해야 합니다.

유통에 활용

이제 Wikipedia의 최근 데이터에 따르면 다음과 같습니다.

upstart 배포는 기본적으로 사용됩니다.

기본적으로 systemd 배포판이 사용됩니다.

(바라보다위키피디아최신정보를 받아보세요)

Upstart나 systemd를 사용하지 않는 배포판:

논쟁

과거에systemd를 피하기 위해 데비안 포크가 제안되었습니다.. 이것독일어 GNU+Linux생성됨 - systemd가 없는 Debian 브랜치(감사합니다.머피 1댓글에서 지적했습니다.)

이 분쟁에 대한 자세한 내용은 다음을 참조하세요.

많은 분들이 이미 알고 계시겠지만, Ian Jackson이 추진한 Init GR 데비안 투표는 시스템의 눈사태로부터 데비안의 유산과 사용자를 보호하는 데 거의 도움이 되지 않았습니다.

이러한 상황은 실제로 개발의 자유를 위협하고 데비안과 그 업스트림 및 다운스트림 파트너에게 심각한 결과를 초래할 수 있는 시스템 종속성을 잠글 수 있습니다.

CTTE는 종속성을 성공적으로 교환하고 sysvinit를 통해 systemd를 미묘하게 설치하여 시간을 벌었지만 이 프로세스조차 피곤하고 드라마로 가득했습니다. 마침내 일주일 전 이안 잭슨(Ian Jackson)이 사임했습니다. [...]

나는 즉시 기술위원회에서 사임합니다.

프로젝트 구성원 중 30~40%의 견해가 TC에서 계속해서 대표되는 것이 중요하지만, 현 시점에서 그렇게 하기에는 제가 너무 논란의 여지가 있는 수치입니다. 나는 한발 물러서서 프로젝트 거버넌스에 대한 대화를 덜 개인적인 것으로 만들기 위해 노력해야 합니다. [...]

Devuan은 데비안의 기본 초기화 시스템으로 사용되는 것에 대한 논란에서 탄생했습니다. 이것systemd에 대한 데비안의 공식 입장주장이 가득하다다른 사람들은 사실이 아니라고 폭로했습니다.. 관심 있는 독자들은 이 뜨거운 주제에 대해 계속해서 토론할 수 있습니다.체계적 논란. 하지만 침착함을 유지하고 예의바른 목소리를 유지하시기 바랍니다. Devuan에서는 과거를 되돌아보기보다 잘못된 프로그래밍에 더 관심이 있습니다. [...]

systemd 논쟁에 관한 여러 웹사이트와 기사가 만들어졌습니다.

가지다많은Hacker News에 대한 흥미로운 토론:

다른 분포에서도 비슷한 경향이 관찰될 수 있습니다.

철학

갑자기 나타나다DOTADIW의 Unix 철학인 "한 가지 일을 잘 수행하라"를 따르십시오. 이는 전통적인 init 데몬을 대체합니다. 서비스 시작 및 중지를 제외한 다른 작업은 수행하지 않습니다. 다른 작업은 다른 특수 하위 시스템에 위임됩니다.

체계그 이상을 수행합니다. 서비스 시작 및 중지 외에도 비밀번호, 로그인, 터미널, 전원 관리, 공장 초기화, 로그 처리, 파일 시스템 마운트 지점, 네트워킹 등을 관리합니다.정보파일의 일부 기능.

확장 계획

~에 따르면systemd의 성과와 향후 발전에 대한 전망2014년 GNOME.asia에서의 Lennart Poettering의 강연에 따르면, systemd의 주요 목표, 해당 영역 및 아직 진행 중인 영역은 다음과 같습니다.

시스템 목표:

우리의 목표

  • Linux를 수많은 조각에서 경쟁력 있는 범용 운영 체제로 바꾸십시오.

  • 인터넷을 구축하는 차세대 운영체제의 통일 배포판 사이의 무의미한 차이

  • 핵심 운영 체제에 혁신을 다시 가져옵니다.

  • 데스크탑, 서버, 컨테이너, 임베디드, 모바일, 클라우드, 클러스터,... . 이 지역은 생각보다 가깝습니다.

  • 관리자의 복잡성을 줄이고 감독 없이 안정성을 높입니다.

  • 모든 것은 생각해 볼 가치가 있다

  • 자동 검색 및 플러그 앤 플레이가 핵심입니다.

  • 우리는 부서진 물건을 테이프로 붙이는 것이 아니라 고쳐줍니다.

이미 다룬 영역:

우리가 다룬 내용:

시스템 초기화, 로깅, 로그인 관리, 장치 관리, 임시 및 휘발성 파일 관리, 바이너리 형식 등록, 백라이트 저장/복원, rfkill 저장/복원, 부트 차트, 미리 읽기, 암호화된 저장소 설정, EFI/GPT 파티션 검색, 가상 머신 /컨테이너 등록, 최소 컨테이너 관리, 호스트 이름 관리, 로케일 관리, 시간 관리, 무작위 시드 관리, sysctl 변수 관리, 콘솔 관리,... .

진행중인 작업:

우리가 하는 일:

  • 네트워크 관리
  • 시스템 네트워크
  • 로컬 DNS 캐시, mDNS 응답자, LLMNR 응답자, DNSSEC 검증
  • 커널의 IPC
  • kd버스, sd버스
  • NTP 시간과 동기화
  • 시스템 시간 동기화
  • 컨테이너와의 추가 통합
  • 서비스 샌드박스
  • 애플리케이션 샌드박스
  • 운영 체제 이미지 형식
  • 컨테이너 이미지 형식
  • 이미지 형식 적용
  • 자동 검색 기능이 있는 GPT
  • 무상태 시스템, 인스턴스화 가능한 시스템, 공장 초기화
  • /usr은 운영 체제입니다.
  • /etc는 (선택적) 구성입니다.
  • /var는 (선택 사항) 상태입니다.
  • 원자 노드 초기화 및 업데이트
  • 클라우드와 통합
  • 노드 간 서비스 관리
  • 검증 가능한 운영 체제 이미지
  • 펌웨어까지
  • 부트로더

이 답변의 범위

~처럼머피 1“수년에 걸쳐 systemd의 작업 범위가 단순한 시스템 시작을 넘어 훨씬 확장되었다는 점에 주목해야 합니다.”라고 의견은 말합니다.

나는 여기에 관련된 대부분의 정보를 포함하려고 노력했습니다. 여기서는 질문에서 요청한 대로 init 시스템으로 사용될 때 Upstart와 systemd의 공통 기능을 비교했습니다. 이러한 기능은 Startup과 비교할 수 없지만 그 존재가 매우 중요하기 때문에 init 시스템의 범위를 벗어나는 systemd의 기능만 언급했습니다. . 이 두 프로젝트의 차이점을 이해하는 것이 중요합니다. 자세한 내용은 관련 문서를 확인해야 합니다.

추가 정보

자세한 내용은 다음을 방문하십시오.

추가 기능

이것납(II) 산화물팀은Systemd 및 SysV Init Linux 치트 시트.

답변2

upstart와 systemd 모두 기존 SysV init 시스템의 일부 제한 사항을 해결하려고 시도합니다. 예를 들어 일부 서비스는 다른 서비스 후에 시작해야 하지만(예: NFS 파일 시스템은 네트워크가 실행되기 전에 마운트할 수 없습니다) SysV에서 이를 처리하는 유일한 방법은 rc#.d 디렉터리에 링크를 설정하여 다음 중 하나를 실행하는 것입니다. 다른 이전 내부. 그 외에도 나중에 종속성이 추가되거나 변경되면 모든 항목의 번호를 다시 매겨야 할 수도 있습니다. Upstart 및 Systemd에는 요구 사항 정의를 위한 더 스마트한 설정이 있습니다. 또한 모든 것이 일종의 쉘 스크립트이기 때문에 모든 사람이 최고의 init 스크립트를 작성할 수는 없다는 문제도 있습니다. 이는 시작 속도에도 영향을 미칩니다.

systemd의 몇 가지 장점을 볼 수 있습니다.

  • 시작된 각 프로세스에는 자체 cgroup 또는 특정 cgroup이 있습니다.
  • xinetd가 서비스에 대해 수행하는 것과 유사하게 서비스에 대한 소켓 및 파일 핸들을 미리 생성하여 종속 서비스를 더 빠르게 시작할 수 있습니다. 예를 들어, systemd는 syslog를 위해 /dev/log에 대한 파일 핸들을 열어두고 /dev/log로 전송된 후속 서비스는 syslogd가 인계받을 준비가 될 때까지 메시지를 버퍼링합니다.
  • 서비스가 실제로 시작될 때 실행되는 프로세스 수가 더 적습니다. 이는 서비스를 시작하기 위한 쉘 스크립트를 작성하지 않았음을 의미합니다. 이렇게 하면 속도가 향상되고 처음에 설정하기가 (IMO) 더 쉽습니다.

내가 알고 있는 한 가지 단점은 systemd의 소켓/FH 사전 할당을 활용하려면 systemd가 FH를 전달하도록 많은 데몬을 패치해야 한다는 것입니다.

답변3

systemd위에서 언급한 내용을 참조하세요ML 일반오늘. 그러니 주의 깊게 읽어보시기 바랍니다.혼라인언제나 그렇듯이 Linux 기술의 훌륭한 소스이자 제가 연구를 시작한 곳입니다.SysV Init 및 Upstart를 대체하여 시스템화됨. 그러나 H 온라인 기사(이 경우)는 별로 유용한 독서가 아니며, 그 뒤에 숨겨진 실제 목적은 유용한 독서에 대한 링크를 제공하는 것입니다.

진짜 답은 여기에 있다시스템 알림. SysV initd의 문제와 새 시스템이 수행해야 하는 몇 가지 핵심 사항을 제공합니다.

  • 조금 더 적은 것부터 시작하세요.
  • 더 많은 병렬 작업을 시작하세요.

주요 계획은 필요할 때만 서비스를 시작하고 해당 서비스에 대한 소켓을 시작하여 데몬이 완전히 온라인 상태가 되기 오래 전에 필요한 서비스가 생성된 소켓에 연결할 수 있도록 하는 것 같습니다. 분명히 소켓은 소량의 버퍼링된 데이터를 유지합니다. 즉, 지연 중에 데이터가 손실되지 않으며 데몬이 온라인 상태가 되면 처리됩니다.

계획의 또 다른 부분은 파일 시스템을 직렬화하지 않고 필요에 따라 마운트하여 마운트를 기다리지 않고 /home/(혼동하지 말 것 /etc) fsck프로세스 등을 할 수 있을 때 데몬을 시작하는 것입니다. . 가 설치 /되었습니다 /var/. 이 목적으로 autofs가 사용될 것이라고 나와 있습니다.

.desktop또한 스크립트를 대체하여 스타일 초기화 설명자를 만드는 목표도 있습니다. 이렇게 하면 sh쉘 스크립트에서 자주 사용되는 느린 프로세스와 더 많은 프로세스 포크를 방지할 수 있습니다 sed.grep

또한 필요할 때 일부 서비스를 시작하지 않고 더 이상 필요하지 않은 경우 서비스를 끌 수도 있습니다. 예를 들어 Bluetooth 모듈과 데몬은 Bluetooth 장치를 사용하는 경우에만 필요합니다. 주어진 또 다른 예는 ssh 데몬입니다. 이것이 inetd가 수행할 수 있는 작업입니다. 개인적으로 나는 이것이 실제로 필요할 때 지연을 의미할 수 있기 때문에 이것이 마음에 드는지 잘 모르겠습니다. 그리고 ssh의 경우 내 inetd가 손상되면 보안 구멍이 발생할 수 있음을 의미하고 전체 시스템이 손상될 수 있음을 의미한다고 생각합니다. 그러나 이 시스템을 깨기 위해 이를 사용하는 것은 불가능하며 원할 경우 서비스별로 이 기능을 비활성화하고 다른 수단을 사용할 수 있다는 말을 들었습니다.

또 다른 기능은 정기적으로 예약된 간격이나 특정 시간에 시간 이벤트를 기반으로 실행하는 기능입니다. 이것은 crond우리가 지금 하는 일과 비슷합니다 atd. 사용자 "cron"을 지원하지 않는다고 들었지만. 개인적으로 이것은 가장 무의미한 일처럼 들립니다. 나는 이것이 다중 사용자 환경에서 작업하지 않는 누군가가 작성/생각했다고 가정하며, 시스템의 유일한 사용자인 경우 사용자 cron은 루트로 실행되지 않는 것 외에는 많은 용도로 사용되지 않습니다. 저는 매일 다중 사용자 시스템에서 작업하며 규칙은 항상 사용자로서 사용자 스크립트를 실행하는 것입니다. 하지만 어쩌면 나는 그들이 가지고 있는 선견지명이 없을 수도 있고, 그것이 내가 달리는 것을 결코 막지도 않기 crond때문에 atd개발자 외에는 누구에게도 해를 끼치지 않을 것 같습니다.

systemd의 단점 중 하나는 이를 최대한 활용하려면 일부 데몬을 수정해야 한다는 것입니다. 지금은 작동하지만 소켓 모델용으로 특별히 작성된 경우 더 잘 작동할 것입니다.

대부분의 시스템화된 사람들이 신생 기업에서 겪는 문제는 말이 안되거나 필요하다고 생각하는 이벤트 시스템인 것 같습니다. 아마도 그들의 말이 가장 잘 표현되었을 것입니다.

또는 더 간단히 말하면: 사용자가 방금 D-Bus를 시작했다는 사실이 NetworkManager도 시작해야 한다는 의미는 아닙니다(그러나 이것이 바로 Upstart가 수행하는 작업입니다). 그 반대: 사용자가 NetworkManager를 요청하면 D-Bus도 시작되어야 함을 나타냅니다. (분명히 이것이 대부분의 사용자가 기대하는 것입니다. 그렇죠?)
좋은 초기화 시스템은 필요한 것만, 필요할 때만 시작해야 합니다. 게으르거나 미리 병렬로 실행됩니다. 다만, 필요 이상으로 런칭해서는 안 되며, 특히 서비스를 이용할 수 있는 모든 설치 프로젝트에 대해 런칭해서는 안 됩니다.

내가 말했듯이 이것은시스템 알림.

답변4

첫 번째 디자인 초안부터 시작하여 systemd에 대한 자세한 내용을 보려면(또한 신생 시스템을 포함한 기존 init 시스템에 대한 자세한 비평 및 systemd가 이를 수정하기 위해 제안하는 방법) 다음을 방문하세요.홈페이지. 시간이 지남에 따라 기업가 정신에 관한 여러 기사가 출판되었습니다.저수온망. systemd(또는 pulseaudio)에 대한 언급은 끝없는 말싸움을 촉발할 것입니다.

IMVHO(Fedora 사용자) I매우이것에 만족하십시오. 이 줄의 일부는 현재 Linux 시스템의 복잡성을 처리하기 위해 오랫동안 지연되었습니다. Fedora는 한동안 upstart를 사용해왔지만 거의 변경하지 않고 init 스크립트를 실행하는 sysvinit의 기발한 대체 수단으로 그 단계를 벗어나지 못했습니다. 실행 구성 단순화에 대한 약속은 다음을 기반으로 합니다.다시상호 의존성을 수동으로 설정하면 작동하지 않습니다. systemd는 종속성을 자체적으로 해결합니다(또는 종속성과 관계없이 시작되도록 허용하고 자체적으로 해결합니다). 또 다른 큰 장점(심각한 단점이라고도 함)은 Linux 관련 기능을 최대한 활용한다는 것입니다(특히 cgroup을 사용하면 데몬과 모든 하위 항목을 격리할 수 있으므로 쉽게 모니터링하고 리소스를 제한하거나 종료할 수 있습니다). ; 그 외 많은 것들이 있습니다.

관련 정보