Запустите программу на экране после перезагрузки

Я использую несколько безголовых Ubuntu 12.04. Мое типичное использование включает вход в каждую машину через сеанс замазки и выполнение сценария с использованием экрана.

После входа в систему через putty я выполняю следующее из командной строки: screen /home/user/"script"

Мой вопрос:

Есть ли способ получить мой скрипт / программу? запускаться автоматически после перезагрузки? Я пытаюсь предотвратить потерю производительности в ситуации потери питания / автоматической перезагрузки.

4
задан 21 March 2013 в 13:38

5 ответов

Вы можете использовать cron, чтобы сделать это за вас.

  • Просто выполните crontab -e в терминале
  • . Он откроется в выбранном вами редакторе, где вы можете набрать
    @reboot <your command>
    [ 116] (убедитесь, что вы указали полный путь для всех исполняемых файлов)
  • Сохраните файл и выйдите

Ссылка: http: // manpages. ubuntu.com/manpages/precise/en/man5/crontab.5.html

0
ответ дан 21 March 2013 в 13:38

Измените ваш сценарий таким образом, чтобы его можно было вызывать как сценарий инициализации или, что еще лучше, в качестве начального задания. Если вам повезет, вы можете сохранить его почти таким же, как есть, и запустить его при загрузке, просто добавив конфигурацию upstart в /etc/init. (Возьмите любой маленький файл .conf в качестве шаблона.)

Две вещи, о которых вам нужно знать:

  1. Ваш скрипт вызывается с привилегиями root , Отбросьте их, чтобы ваш скрипт работал с соответствующими правами пользователя (в данном случае, с вашей идентификацией). Сделайте это, вызвав последнюю команду экрана в вашем скрипте, используя su

    su -c "screen ..." - username.

  2. При запуске при загрузке ваш скрипт запускается без управляющего терминала, в то время как вы в настоящее время запускаете его из оболочки. Поскольку вы используете screen, я предполагаю, что вы захотите повторно подключиться к терминалу с script при следующем входе в систему. Если это так, это может потребовать передачи дополнительных опций при вызове screen.

0
ответ дан 21 March 2013 в 13:38

Официальный способ сделать это - создать сценарии инициализации. Эти сценарии содержат команды запуска, остановки, перезапуска и состояния и могут быть настроены для выполнения этих команд в определенное время. Поэтому, когда вы переключаетесь на leven 6 (перезагрузка), он останавливает службу перед перезагрузкой, и при правильной настройке автоматически запускает запуск этого сценария при переходе на уровень запуска 3. Эти сценарии можно найти в /etc/init.d. Если вы создаете файл правильно (так что он должен иметь возможность обрабатывать параметры start и stop), вы можете запустить update-rc.d script.sh по умолчанию, чтобы установить его автоматическую загрузку. Убедитесь, что вы сначала выполнили команду chmod + x, чтобы сделать ее исполняемой. Папка /etc/init.d содержит множество примеров того, как это делается.

Существует также файл /etc/rc.local, который запускается после полной загрузки системы, и вы можете просто добавить свои собственные команды.

Лично я предпочитаю скрипты init.d, потому что вы можете убедиться, что программа корректно закрывается, что предотвращает возможные потери данных или другие ошибки. Но для одной команды или чего-то, что не может сломать /etc/rc.local, все будет хорошо.

0
ответ дан 21 March 2013 в 13:38

Я попробовал все вышеперечисленное, но не повезло. Запускаемый мной скрипт требует X для запуска.

То, что в конечном итоге сработало, хотя, возможно, это и был легкий выход, - это создать небольшой скрипт с именем launch.sh в моем домашнем каталоге и добавить его в список приложений Ubuntu Startup.

launch.sh содержал следующее и выполнял мой скрипт изнутри:

#!/bin/sh
screen -dmS 051 /home/{user}/{myscript} 

Я обнаружил, что файл конфигурации для запуска приложения launch.sh содержится в файле / home / { пользователь} /. config / autostart / launch.sh.desktop, и я смог воссоздать оба файла в тех же местах на других моих коробках и восстановить успех. Спасибо всем, кто пытался помочь. Я потею немного меньше пуль, придумав обходной путь для этого.

0
ответ дан 21 March 2013 в 13:38

У меня есть это в скрипте, чтобы запустить rtorrent на экране во время загрузки:

#!/bin/sh

case $1 in
     start)
        su - johan -c "screen -dm rtorrent"
       ;;
     stop)
        killall rtorrent
        killall screen
        ;;
esac
exit 0

Вы можете объединить это с ответом Вишнуса, если вы предпочитаете crontab, <your command> = screen -dm /usr/home/"script".

0
ответ дан 21 March 2013 в 13:38

Другие вопросы по тегам:

Похожие вопросы: