Ubuntu 14.04 작업은 시작 중에 중단될 수 있습니다.

Ubuntu 14.04 작업은 시작 중에 중단될 수 있습니다.

시작하고 특정 작업을 수행한 다음 자체적으로 종료해야 하는 가상 머신이 있습니다.

또한 "정상적인" 시작 동작(예: 응용 프로그램이 실행되기 전 또는 종료되기 전)을 얻기 위해 특별한 시작 시퀀스를 중단할 수 있어야 합니다.

나는 다음을 사용하여 이 작업을 수행하려고 합니다 /etc/rc.local.

#!/bin/bash
trap "echo;echo Resuming regular system startup...;exit" SIGINT
echo "Press Ctrl+C within 10 seconds to skip application run..."
sleep 10
su ubuntu -c /home/ubuntu/application.py
echo "Press Ctrl+C within 30 seconds to abort shutdown..."
sleep 30
shutdown -h now

루트로 로그인한 상태에서 /etc/rc.local을 직접 실행하면 정상적으로 실행되고 예상대로 작동하지만 실제로 시스템 시작의 일부로 실행되면 작동하지 않는 것 같습니다. 정상적으로 실행되지만 Ctrl+C에 응답하지 않으며 실제로 중단할 수 있습니다.

SSH: 이 스크립트를 실행하는 동안 a를 삽입하고 실행해도 killall -INT rc.local스크립트 실행이 중지되지는 않지만 killall -9 rc.local스크립트가 중지되고 콘솔이 login.

아래와 같이 시스템이 upstart를 사용하여 부팅되는 것으로 보입니다.

root@fundie:~# ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:01 /sbin/init
root@fundie:~# /sbin/init --version
init (upstart 1.12.1)
Copyright (C) 2006-2014 Canonical Ltd., 2011 Scott James Remnant

This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

내가 무엇을 놓치고 있나요?

답변1

나는 다음을 사용하여 이 문제를 해결했습니다.플리머스, Ubuntu 시스템을 시작하고 종료할 때 그래픽 "시작" 화면을 제공하는 응용 프로그램입니다. 나는 이것을 사용하여 로터리 방식으로 SIGINT를 rc.local 스크립트에 보낼 수 있었습니다.

이것은 약간의 해킹이지만 이것이 내가 한 일입니다.

#!/bin/bash
plymouth watch-keystroke --command="kill -INT $$" --keys=' ' &
trap "echo;echo Resuming regular system startup...;exit" SIGINT
for i in `seq 10 -1 1`
do
        echo -ne "\rPress spacebar within $i second(s) to skip application run... "
        sleep 1
done
echo
su ubuntu -c /home/ubuntu/application.py
for i in `seq 30 -1 1`
do
        echo -ne "\rPress spacebar within $i second(s) to abort shutdown... "
        sleep 1
done
echo
shutdown -h now

이것은 내 목적에 충분합니다.

관련 정보