![telinit 1 거기에서 명령을 실행하십시오.](https://linux55.com/image/39966/telinit%201%20%EA%B1%B0%EA%B8%B0%EC%97%90%EC%84%9C%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EC%8B%AD%EC%8B%9C%EC%98%A4..png)
여러 Debian(Wheezy) 시스템에 대한 유지 관리를 수행해야 하는데, 이 작업은 실행 수준 1에서 수행되어야 합니다. 그러나 모든 기계에 키보드와 화면이 있는 것은 아닙니다. 일부는 다른 곳에도 있습니다. 따라서 거기에 들어가서 루트 비밀번호를 입력하여 작업을 실행할 수는 없습니다.
그래서 내 질문은 "Enter root Password or ^D" 프롬프트 전에 명령을 실행하도록 데비안에게 어떻게 지시합니까?
런레벨 1에서만 실행되는 init 스크립트를 만들어 보았지만 모든 프로세스가 종료되기 전에 여전히 트리거됩니다.
이를 수행할 수 있는 방법이 있습니까?
답변1
방법을 찾았는데 더러운 느낌이 드네요... :)
그래서 이 글을 계속 열어두고 혹시 깨끗한 방법이 있는지 살펴보도록 하겠습니다.
내 해결책은 sulogin 대신 스크립트를 실행하고 스크립트 내에서 이전 inittab을 복원하도록 inittab을 수정하는 것이었습니다.
이것은 방금 일부 가상 머신 하드 드라이브를 압축하는 데 사용한 "터미널에 잘라내기 및 붙여넣기"의 개념 증명 버전입니다.
그러나 이것이 무엇을 하는지 알지 못한다면 이것을 시도하지 마십시오!
mkdir -p /opt/single
cp -a /etc/inittab /opt/single/inittab
sed -i "s/\/sbin\/sulogin/\/opt\/single\/job.sh/" /etc/inittab
cat>/opt/single/job.sh<<EOF
#!/bin/bash
#restore inittab
mv -fv /opt/single/inittab /etc/inittab
#make sure no one runs this by accident
chmod -x /opt/single/job.sh
#do your thing...
mount -o remount,ro /dev/sda1
fsck.ext4 -vfp /dev/sda1
zerofree -v /dev/sda1
mount -o remount,rw /dev/sda1
#work done
reboot
EOF
chmod +x /opt/single/job.sh
telinit 1