Linux에서 rc.local을 활용하여 시스템 부팅 시 실행할 시작 프로그램을 등록할 때 Windows 서비스의 “지연된 시작”처럼 명령어의 실행을 지연시킬 수 있다. Linux도 서비스(systemlctl) 등록을 할 수 있지만 rc.local을 사용하면 실행할 명령어만 간단하게 등록할 수 있다. crontab에서 @reboot
를 활용할 때도 동일하다.
echo "sudo -u <user> <command...>" | at now + 1 minutes
at 명령은 최소 분 단위, 초 단위 설정 불가하다. /etc/rc.d/rc.local 에 실행 권한이 있는지 확인한다.
rc.local에서 직접 sleep을 주어 다음 명령을 실행할 때까지 지연시킬 수도 있다.
sleep 10
sudo -u <user> <command...>
위와 같이 명령어 라인보다 sleep이 위에 오도록 하면 작성한 명령은 sleep으로 지정한 시간만큼 대기한 후 명령을 실행한다. 그러나 위와 같은 방식으로 명령을 지연 시작하는 경우 시스템 시작 후 sleep이 되는 동안 systemd 서비스들이 시작되지 않는 것을 알 수 있다.
rc.local에 sleep 60 정도 길게 주고 시스템을 재시작 한 후 $ systemctl status
명령어를 실행해 보면, job이 queued 된 상태로 stating 상태에 서비스들이 머무는 것을 확인할 수 있다. 따라서 rc.local에서는 sleep을 주기보다는 at 명령어로 job을 추가하여 딜레이는 주는 것을 권장한다.