telinit 1 거기에서 명령을 실행하십시오.

telinit 1 거기에서 명령을 실행하십시오.

여러 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

관련 정보