Я использую несколько безголовых Ubuntu 12.04. Мое типичное использование включает вход в каждую машину через сеанс замазки и выполнение сценария с использованием экрана.
После входа в систему через putty я выполняю следующее из командной строки: screen /home/user/"script"
Мой вопрос:
Есть ли способ получить мой скрипт / программу? запускаться автоматически после перезагрузки? Я пытаюсь предотвратить потерю производительности в ситуации потери питания / автоматической перезагрузки.
Вы можете использовать cron, чтобы сделать это за вас.
crontab -e
в терминале @reboot <your command>
Ссылка: http: // manpages. ubuntu.com/manpages/precise/en/man5/crontab.5.html
Измените ваш сценарий таким образом, чтобы его можно было вызывать как сценарий инициализации или, что еще лучше, в качестве начального задания. Если вам повезет, вы можете сохранить его почти таким же, как есть, и запустить его при загрузке, просто добавив конфигурацию upstart в /etc/init
. (Возьмите любой маленький файл .conf
в качестве шаблона.)
Две вещи, о которых вам нужно знать:
Ваш скрипт вызывается с привилегиями root , Отбросьте их, чтобы ваш скрипт работал с соответствующими правами пользователя (в данном случае, с вашей идентификацией). Сделайте это, вызвав последнюю команду экрана в вашем скрипте, используя su
su -c "screen ..." - username
.
При запуске при загрузке ваш скрипт запускается без управляющего терминала, в то время как вы в настоящее время запускаете его из оболочки. Поскольку вы используете screen
, я предполагаю, что вы захотите повторно подключиться к терминалу с script
при следующем входе в систему. Если это так, это может потребовать передачи дополнительных опций при вызове screen
.
Официальный способ сделать это - создать сценарии инициализации. Эти сценарии содержат команды запуска, остановки, перезапуска и состояния и могут быть настроены для выполнения этих команд в определенное время. Поэтому, когда вы переключаетесь на 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, все будет хорошо.
Я попробовал все вышеперечисленное, но не повезло. Запускаемый мной скрипт требует X для запуска.
То, что в конечном итоге сработало, хотя, возможно, это и был легкий выход, - это создать небольшой скрипт с именем launch.sh в моем домашнем каталоге и добавить его в список приложений Ubuntu Startup.
launch.sh содержал следующее и выполнял мой скрипт изнутри:
#!/bin/sh
screen -dmS 051 /home/{user}/{myscript}
Я обнаружил, что файл конфигурации для запуска приложения launch.sh содержится в файле / home / { пользователь} /. config / autostart / launch.sh.desktop, и я смог воссоздать оба файла в тех же местах на других моих коробках и восстановить успех. Спасибо всем, кто пытался помочь. Я потею немного меньше пуль, придумав обходной путь для этого.
У меня есть это в скрипте, чтобы запустить 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"
.