zsh 스크립트를 실행하는 이 서비스를 어디에 설치할 수 있는지 알고 싶습니다.가능한 한 빨리 스크립트를 실행하세요..
스크립트는 /dev/ttyS5의 직렬 포트와 gpio 핀을 사용합니다.
multi-user.target
zsh 스크립트를 계속 실행할 수 있는 것보다 오래된 대상이 있습니까 ?
[Unit]
Description=Acer projector control
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/zsh /usr/local/bin/ff.zsh -a acer
ExecStop=/usr/bin/zsh /usr/local/bin/ff.zsh -rb acer
RemainAfterExit=yes
Restart=on-failure
RestartSec=10s
TimeoutSec=5min
[Install]
WantedBy=multi-user.target
업데이트 2.
[Unit]
Description=Acer projector control
DefaultDependencies=no
After=local-fs.target
After=systemd-modules-load.service
Before=sysinit.target
ConditionPathExists=/dev/ttyS5
Before=shutdown.target
Conflicts=shutdown.target
[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/usr/bin/zsh /usr/local/bin/ff.zsh -a acer
ExecStop=/usr/bin/zsh /usr/local/bin/ff.zsh -rb acer
Restart=on-failure
RestartSec=30s
TimeoutSec=5min
[Install]
WantedBy=sysinit.target
답변1
이를 고려할 때 기반 부팅 프로세스의 전체 구조를 설명하는 의 다이어그램을 참조해야 합니다 man 7 bootup
.systemd
을 지정할 수 있지만 다음 섹션에서 무언가를 지정 WantedBy=sysinit.target
해야 합니다 .[Unit]
[Unit]
DefaultDependencies=no
After=local-fs.target
After=systemd-modules-load.service
Before=sysinit.target
어쩌면 있을 수도 있지
ConditionPathExists=/dev/ttyS5
DefaultDependencies
이를 설정하면 no
서비스가 시작 프로세스 초기에 실행될 수 있지만 서비스 요구 사항에 대해 더 명시적으로 지정해야 합니다.
스크립트는 /usr/local
별도의 파일 시스템에 위치하므로 스크립트를 실행하기 전에 파일 시스템이 마운트되었는지 확인해야 합니다. 이는 에 의해 달성될 수 있습니다 After=local-fs.target
.
/dev/ttyS5
또한 스크립트가 적극적으로 로드하지 않는 한 커널 모듈과 GPIO가 로드되었는지 확인해야 합니다 . 이를 달성하기 위해서는 적절한 모듈을 지정하기 위해 파일을 After=systemd-modules-load.service
사용했다고 가정합니다 . /etc/modules-load.d/*.conf
또한 을 실행하고 systemctl list-units *.device
해당 장치 및/또는 GPIO(있는 경우)에 해당하는 장치를 찾은 다음 .device
이를 실행하도록 서비스를 설정할 수도 있습니다.ttyS5
After=
스크립트가 제대로 작동하거나 작동하기에는 너무 이르다고 판단되면 Before=sysinit.target
대신 시도해 볼 수 있습니다.zsh
WantedBy=basic.target
Before=basic.target
또는 "Between local-fs.target
and "가 충분히 이르지 않은 경우 스크립트와 필요한 모든 것을 initramfs에 패키징하기 위해 후크 스크립트(넣기 ) sysinit.target
를 작성 하고 현재 스크립트를 하나로 변경해야 합니다.initramfs-tools
/etc/initramfs-tools/hooks
update-initramfs
initramfs-tools 시작 스크립트/etc/initramfs-tools/scripts/*/
( 디렉터리 중 하나에 넣으십시오 ).
그러나 나는 zsh
쉘과 그 요구 사항으로 initramfs를 부풀리는 것에 대해 권장합니다. initramfs 경로로 가고 싶다면 /bin/dash
먼저 (경량 POSIX 쉘)을 사용하여 부팅 시간 스크립트를 실행 가능하게 만들어야 합니다. 이것이 존재하는 기본 쉘이기 때문입니다. 현대 데비안에서/우분투의 initramfs에서.
후크 스크립트와 부트스트랩 스크립트 모두 따라야 하는 특정 요구 사항이 있습니다. man 7 initramfs-tools
두 가지 유형의 스크립트에 대한 예가 있습니다.
또한 initramfs 중에 모든 장치가 아직 초기화되지 않았을 수 있다는 사실도 처리해야 합니다. udev
커널 모듈이 로드되는 동안 장치를 생성하느라 바쁠 것입니다. 후크 스크립트는 드라이버 /dev/ttyS5
와 GPIO가 initramfs에 포함되도록 해야 하며, 부팅 스크립트는 이를 명시적으로 로드하거나 장치를 사용하기 전에 자동으로 로드되었는지 확인해야 합니다.