나는 어떤 일을 하는 올바른 방법을 찾을 수 없다현지의systemd의 스크립트(또는 매우 로컬 명령), 나는 그러한 스크립트에 대한 서비스(systemd의 단위로)를 생성할 수 없다는 것을 이미 알고 있습니다(또는 생성해야 합니까?)....
내가 찾은 해결 방법은 rc.local을 만들고 실행 권한을 부여하는 것이었습니다.
printf '#!/bin/bash \n\nexit 0' >/etc/rc.local
chmod +x /etc/rc.local
예를 들어, 귀하가 간단한 rc.local을 구성한 오래된 서버를 가지고 있다면, 귀하가 무엇을 했는지, 그리고 rc.local이 외부 패키지에서 존중되기 때문에 배포판에 새로운 것을 업그레이드하거나 설치하는 것이 얼마나 해로울지 알 수 있습니다. , 그러나 반면에 간단한 작업을 완료하기 위해 서버를 설치하고 시스템 장치 한두 개 또는 세 개(또는 심지어 sysvinit 서비스)를 만드는 경우 이는 때때로 여러분의 삶을 훨씬 더 복잡하게 만들 수 있습니다. 내 유닛 이름보다 어려운 것은 언젠가 배포 개발에서 생성되고 업그레이드 시 설치될 수 있는 새로운 서비스의 이름과 충돌하여 내 스크립트에 문제를 일으킬 수 있습니다!
이해합니다또 다른 문제묻다rc.local은 어디에 있나요?대답은 그것을 만들고 실행 권한을 부여하는 것입니다. 내 질문은 실제로아니요ㅏ복사, 왜냐하면 저는 그것이 어디에 있는지 알고 싶지 않기 때문입니다. 제 말을 믿으세요. 저는 단지 알고 싶을 뿐입니다.수용하다이것은더 이상 사용되지 않음그런데 이런 일을 제대로 할 수 있는 방법을 찾을 수 없는데, 이런 간단한 일을 위해서 정말 유닛을 만들어야 할까요?
답변1
rc-local.service
다른 곳에서 언급했듯이 아래에 사용하면 상당히 더러워질 수 있습니다 systemd
.
- 이론적으로는 배포판에서 이를 활성화하지 못할 수도 있습니다. (예를 들어 동일한 빌드 옵션을 비활성화하면
poweroff
많은 사람들이 사용하는 / 명령 도 제거되기 때문에 이것이 일반적이라고 생각하지 않습니다 .)reboot
- 의미론이 완전히 명확하지 않습니다. Systemd는 한 가지 방법을 정의
rc-local.service
하지만 데비안은 최소한 하나의 중요한 설정을 변경하는 내장 파일을 제공합니다.
rc-local.service
종종 잘 작동합니다. 위의 사항이 걱정된다면 그냥 복사해서 만들어도 됩니다! 이것은 마법입니다:
# /etc/systemd/system/my-startup.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/libexec/my-startup-script
[Install]
WantedBy=multi-user.target
모든 세부 사항[*]을 알 필요는 없을 것 같지만, 여기서 알아야 할 두 가지가 있습니다.
이 기능을 활성화하려면 을 사용해야 합니다
systemctl enable my-startup.service
.스크립트가 다른 서비스(포함)에 의존하는 경우
network-online.target
해당 서비스를 선언해야 합니다. 예를 들어 행 합계가[Unit]
포함된 섹션을 추가합니다 .Wants=network-online.target
After=network-online.target
Early Start 서비스, 특히 이미 구독한 서비스에 대한 종속성에 대해 걱정할 필요가 없습니다
basic.target
. 이러한 서비스는 설정되지 않는 한my-startup.service
나중에 자동으로 순서가 지정됩니다 .basic.target
DefaultDependencies=no
종속성 중 하나가 "조기 시작" 서비스인지 확실하지 않은 경우 한 가지 접근 방식은 를
basic.target
실행하여 이전에 주문한 서비스를 나열하는 것입니다systemctl list-dependencies --after basic.target
. (예--after
, 아니오 참고--before
).
pre-systemd에도 적용되는 몇 가지 고려 사항이 있다고 생각합니다 rc.local
.
- 동일한 명령을 제어하려는 다른 프로그램과 명령이 충돌하지 않는지 확인해야 합니다.
- 따르지 않는 것이 가장 좋습니다
rc.local
.
[*] 대부분의 일회성 스크립트에 더 적합하기 때문에 Type=oneshot
+를 사용합니다 . RemainAfterExit=yes
일련의 명령을 실행하면 my-startup
완료되면 "활성"으로 표시되고 데몬을 시작하지 않을 것이라고 공식적으로 명시되어 있습니다.
답변2
잊어 버려 rc.local
...
~처럼CentOS 7에 대해 이야기하고 있습니다.그리고데비안 8 소개그리고우분투 15 소개:
systemd+Linux 운영 체제를 사용하고 있습니다. van Smoorenburg System 5 클론의 /etc/rc.local
호환성 메커니즘인 이전 버전과의 호환성 메커니즘이기 때문에 systemd의 이중 이전 버전과의 호환성 메커니즘입니다 .rc
/etc/rc.local
심각한 오류가 발생할 수 있습니다 . 사람들은 rc.local
부트로더의 동일한 위치인 systemd가 실행되는 방식이 이전과 다르다는 사실에 놀랐습니다 . (또는 실수로 예상: 실제로 실행되지 않습니다.마지막OpenBSD 매뉴얼에는 여전히 명시되어 있습니다. ) 다른 사람들은 이전 작업 방식을 예상하여 만든 것이 rc.local
새로운 udev
규칙, NetworkManager systemd-logind
, systemd-resolved
또는 다양한 "스위트"로 대체되는 것에 놀랐습니다.
"https://unix.stackexchange.com/questions/389289/"에 표시된 것처럼 일부 운영 체제는 이미 systemd를 제공합니다.아니요이전 버전과의 호환성 기능systemd-rc-local-generator
발전기 와 같은. 동시에 데비안은 여전히 이전 버전과의 호환성 기능을 유지합니다.,Arch Linux를 빌드할 때 systemd를 끄십시오.. 따라서 Arch와 그것이 기대하는 운영 체제에서는/etc/rc.local
완전히 무시됨.
잊어 버려 rc.local
... 이것은 갈 길이 아닙니다. systemd+Linux 운영 체제가 있습니다. 따라서 적절한 시스템 서비스 단위를 만들고 이전 버전과의 두 가지 수준의 호환성이 아닌 다른 지점에서 시작하지 마십시오. (우분투와 페도라에서는삼여러 번 삭제한 후 후속 van Smoorenburg System 5 rc
클론이 rc.local
삭제되었습니다.그 자체를 두 번10여년 전 처음에는 신생업체로 대체되었고 그 다음에는 systemd로 대체되었습니다. )
아직도 기억하다systemd로 마이그레이션하기 위한 첫 번째 규칙.
이것은 systemd와 관련된 새로운 아이디어도 아닙니다. van Smoorenburg 및 Upstart 시스템 에서 rc
해야 할 일은 . .rc
rc.local
rc
/etc/rc.local
rc
/etc/rc.local
Unix의 일곱 번째 버전과 그 이전 버전으로 거슬러 올라갑니다. AT&T Unix System 3으로 대체되었으며 /etc/inittab
실행 수준을 기반으로 합니다(AT&T Unix System 5 rc
는 약간 다릅니다)./etc/inittab
1983년. 심지어저것이제는 역사가 되었습니다.
nosh toolset의 서비스 번들 service-manager
, Mewburn의 스크립트 system-control
, systemd의 서비스 단위 파일, Upstart의 작업 파일, runit/s6/daemontools의 서비스 디렉터리-encore, van Smoorenburg의 스크립트 등 서비스 관리 시스템에 적합한 기본 서비스 정의를 생성하세요. ./etc/rc.d/
rc
/etc/init.d/
rc
/etc/systemd/system/
systemd에서는 이러한 관리자가 추가한 서비스 단위 파일이 일반적으로(또는 /usr/local/lib/systemd/system/
드물게) 들어갑니다. nosh 서비스 관리자는 /var/local/sv/
지역 서비스 묶음을 총괄하는 곳입니다. rc
FreeBSD에서 Mewburn이 사용합니다 /usr/local/etc/rc.d/
. 포장된그러나 서비스 단위 파일과 서비스 팩을 만드는 경우에는 다른 위치에 저장하십시오.
추가 읽기
- Lennart Petlinget al. (2014).systemd-rc - 로컬 생성기. 시스템 매뉴얼 페이지. freedesktop.org.
rc.local
. FreeBSD 시스템 관리자 매뉴얼. 2016년 4월 23일.- https://unix.stackexchange.com/a/233581/5132
- 레나트 페틀링(2011-08-29).
/etc/rc.local
아니면 삭제chmod -x
해주세요. 레드햇 버그 #734268. - https://unix.stackexchange.com/a/211927/5132
- 더크 슈미트(2017-12-19).
rc.local
아직 시작은 이르다. 시스템 오류 #7703 - https://wiki.archlinux.org/index.php?title=Systemd&diff=378926&oldid=378924
- 벤자민 케인(2011-12-30). 언제 사용할 수 있고 언제 사용할 수 없습니까?
rc.local
. bencane.com. - https://unix.stackexchange.com/a/49636/5132
- 레나트 페틀링(2010-10-01).SysV init 스크립트를 시스템 서비스 파일로 변환하는 방법은 무엇입니까?. 0pointer.de.
- https://askubuntu.com/questions/523369/
- 조나단 데보인 폴라드(2015).
/etc/inittab
그것은 과거의 일입니다.. 일반적인 답변. - 조나단 데보인 폴라드(2014).실행 중인 스크립트와 서비스 단위를 나란히 봅니다.. 일반적인 답변.
- 조나단 데보인 폴라드(2014).nosh를 사용하여 서비스를 설정하고 실행하는 실제 사례. 소프트웨어.
- 조나단 데보인 폴라드(2016). "
systemd.unit
매뉴얼 페이지에 시스템 검색 경로가 없습니다.".systemd doco 정오표. 일반적인 답변.
답변3
요약https://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd
/etc/systemd/system/rc-local.service를 생성합니다:
# /etc/systemd/system/rc-local.service
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
그 다음에:
sudo touch /etc/rc.local
sudo chmod +x /etc/rc.local
sudo systemctl enable rc-local
조사하다:
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
답변4
크로나 @reboot
부팅 프로세스의 일부가 아닌 시스템 재부팅 후 "곧" 발생해야 하는 작업을 지원하는 것은 사용 중인 초기화 시스템에 대한 모든 종류의 주의를 대체하는 좋은 방법입니다.
경고: ISC Cron이 필요합니다. 그러나 특정 초기화 시스템보다 기본적으로 더 일반적으로 설치되고 활성화되는 것 같습니다.