질문에 유래에 와서 작성에 대한 질문 init.d
파이썬 스크립트를. 한 의견자는 이러한 스크립트가 Python이 아닌 쉘로 프로그래밍되어야한다고 지적했다. 쓰고 init.d
파이썬 스크립트를 :
- 나쁜. 나쁜. 나쁜. 절대 이러지 마
- 권장되지 않습니다.
- 알았어
- 레거시 교리.
- 완전 괜찮아
악몽 시나리오 나이 규칙이 일부 시스템 관리자의 피에 기록되어 있는지 아는 것이 좋습니다.
답변
# 2라고 말하지만 # 1과 매우 비슷합니다. “나쁜. 나쁜. 나쁜. 절대 안 해.” Linux init 스크립트에 대한 표준 은 LSB 에 있으며, 절대로 나오지 않고 “이것은 본 쉘 스크립트”라고 말하지만 몇 가지 가정이 있습니다. 하나는 #으로 시작하는 줄은 주석이며 잘 작동합니다. 더 문제는 init 스크립트가 /lib/lsb/init-functions
“현재 환경에서 (쉘 특수 내장 명령 도트 참조)” 의 명령을 실행해야한다는 요구 사항입니다 .
그러나 더 중요한 것은, 만약 당신이 여기서 정말로 복잡한 것을하고 있다면, 당신은 그것을 잘못하고있는 것입니다. 초기화 스크립트는 매우 간단하고 실용적이어야합니다. 그것들은 프로그램이 아니라 고전적인 의미의 스크립트 여야합니다. 파이썬에서 아름답고 엔지니어링 된 것을 만드는 것보다 모든 sysadmin이 한 번에 쉽게 볼 수있는 간단한 쉘 스크립트를 만드는 것이 좋습니다.
명심해야 할 또 다른 사항은 systemd
Linux에서 모든 시스템 초기화의 미래 일 수도 있고 아닐 수도 있습니다. 시스템화 된 상태에서 초기화는 스크립트가 아닌 간단한 구성 파일로 수행됩니다. 모든 시작은 여러 표준 디자인 패턴에 맞으며 실제로 하나만 선택해야한다는 아이디어입니다. 만약 프로그램이 초기화를 위해 복잡한 것을 사용한다면, 그것은 init 스크립트 자체를 벗어나야합니다.
답변
init.d 스크립트가 실행될 때 파이썬 인터프리터를 사용할 수 있다는 것을 알고 있다면 문제가 없습니다. 이것은 나에게 당신이 다중 사용자 (또는 “그래픽 콘솔”) 실행 수준에서 비교적 늦게 수행되고있는 것을보고 있음을 나타냅니다.
그러나 … 이것은 특정 버전의 Python 인터프리터가 부팅 순서에 필수적 일 수 있으며 업그레이드시 확인해야 할 사항 중 하나임을 의미합니다.
나는 이것이 “3. OK,주의 사항”이라고 말하는 것을 의미한다고 생각합니다.
답변
나는 “3. 확인,주의”와 동의하지만 다른 이유로. Solaris에 대한 나의 경험은 일부 내부 프로그램에 대해 Perl의 OS 사본을 가지고 있다는 것입니다. 쉘 스크립트는 Perl을 시작하기위한 쉘에 지나지 않습니다. 시작 스크립트를 sh로 작성 했습니까? 아니요, 그러나 관리자의 유지 관리 성이 향상되었습니다. 그리고 init 스크립트는 daemon --start
or 와 같은 것을 더 복잡하게 만들지 않았습니다 daemon --stop
. 이 작업을 수행 한 경우 일반 사용자는 권한이없는 모드에서 도구를 시작할 수 있습니다 (프로그램의 맥락에서 의미가있는 경우). 그리고 그들은 모든 종류의 복잡한 설정을 할 필요가 없습니다.
최신 Linux 배포판 (여전히을 사용하는 배포판)에도 init.d
데몬을 쉽게 관리 할 수 있도록 사전 구축 된 많은 기능 모음이 있습니다. 그래픽 부팅 프로세스는 시작 스크립트 중 하나에서 오류가 발생하지 않는 한 이러한 기능을 일상적으로 활용하여 예쁜 로고를 유지합니다. 파이썬 코드 (또는 다른 언어)는 이러한 체계에서 잘 작동하지 않을 수 있습니다.
미학이나 유지 관리에 신경 쓰지 않으면 원하는대로 init 스크립트를 작성할 수 있습니다. 제대로 잘라서 붙여 넣을 수없는 많은 관리자가 명령 줄 인수를 완전히 무시하고 데몬을 시작하는 것을 보았습니다. 종료, 상태 또는 재시작이 없습니다. 미성숙했지만 코드는 여전히 실행되었습니다.
답변
나는 # 1-2 사이에 말한다. LSB는 이런 식으로 지시합니다. Sys-Admin (비 개발 역할)에서 작업 요구 사항은 파이썬, PHP 또는 perl의 개발자 수준 (또는 가벼운 이해)이 아니라 sh / bash 지식을 지시합니다. 그것은 시스템 초기화 스크립트가 아니라 LAMP 스택을위한 것입니다.