Мне нужно запускать приложение автоматически при запуске Ubuntu. Я запустил это приложение, не открывая терминал. Однако это приложение отображает некоторую информацию в окне терминала, и поэтому мне нужно, чтобы приложение запускалось строго после открытия gnome-терминала (автоматически). С этой целью я попытался создать файл сценария в init.d, как это объяснено здесь . Содержание сценария:
#!/bin/bash
cd /home/mediambient/programa
/usr/bin/gnome-terminal -e ./driver &
Это работает, если я запускаю файл, но, похоже, ничего не делает, когда я перезагружаю компьютер. Может кто-нибудь сказать мне, что я делаю не так?
Заранее спасибо.
Вы написали:
/usr/bin/gnome-terminal -e ./driver &
& amp; Параметр, который находится в конце строки, означает, что программа будет скрыта. Это полезно для запуска фоновых приложений, таких как веб-серверы загрузочных звуков, но в вашем случае вы не должны его использовать. Решение так же просто, как удалить его:
/usr/bin/gnome-terminal -e ./driver
И я увидел, что вы не используете GNOME для автозапуска. Используйте эти инструкции вместо серверных (замените google-chrome на приведенную выше команду!): Автозапуск Chrome в Ubuntu
Вы не можете создать сценарий, который запускается из init.d
и отображает окно gnome-terminal
, потому что сценарии в init.d
запускаются до того, как есть какой-либо сеанс входа в систему, чтобы отобразить его. Они запускаются еще до запуска графического интерфейса пользователя.
Если вам нужно запустить этот скрипт при загрузке машины, то вместо того, чтобы пытаться автоматически отображать текст, вы должны сделать так, чтобы он записывал свои выходные данные в файл журнала. Чтобы он выполнял как обычный вывод, так и вывод ошибок в файл журнала, сделайте скрипт следующим образом:
#!/bin/bash
cd /home/mediambient/programa
./driver &>> logfile
Замените logfile
на имя файла журнала, который вы хотите использовать. Возможно, этот файл находится в папке /home/mediambient/programa
или вы можете поместить его в папку для файлов системного журнала (/var/log
). Это твой выбор. Обратите внимание, что оператор &>>
добавит вывод в конец файла журнала. Если вы хотите, чтобы файл журнала перезаписывался каждый раз, вместо этого следует использовать оператор &>
.
root
Также обратите внимание, что сценарии в init.d
будут выполняться как root
. Если вы этого не хотите, но вместо этого хотите запустить programa
от имени пользователя mediambient
, вы можете написать скрипт следующим образом:
#!/bin/bash
cd /home/mediambient/programa
sudo -u mediambient ./driver &>> logfile
Программа запускается как mediambient
, но все равно записывает файл журнала как root
. Если вы также хотите записать файл журнала как mediambient
(что вам, вероятно, следует сделать, если вы помещаете его в домашнюю папку mediambient
), вы можете использовать:
#!/bin/bash
cd /home/mediambient/programa
sudo -u mediambient ./driver 2>&1 | sudo -u mediambient tee logfile > /dev/null
(Если вас интересует, как именно это работает, это объясняет 2>&1
и это объясняет tee
.)
(Кстати, обратите внимание, что ничего в этом сценарии специально требуется bash
, который является превосходной интерактивной оболочкой, но немного ресурсоемким для использования для сценариев инициализации и фоновых сценариев. В течение некоторого времени оболочкой по умолчанию для запуска таких сценариев в Ubuntu была dash
, гораздо более легкий. Если вы используете #!/bin/sh
вместо #!/bin/bash
, который использует предпочтительную оболочку ОС для запуска сценариев оболочки в стиле POSIX. Для этого сценария это не имеет большого значения, но это хорошая привычка, чтобы попасть в .)
В качестве альтернативы, если вам действительно нужно, чтобы скрипт выполнялся при входе пользователя mediambient
графический союзник (а не когда компьютер запускается), тогда вы можете запустить driver
в окне gnome-terminal
. Вы не можете использовать init.d
для этого; вместо этого вы должны использовать средство, предоставляемое вашей рабочей средой.
Если вы используете Ubuntu на основе GNOME (с Unity, Unity 2D, GNOME Classic / Fallback или GNOME Shell в качестве среды рабочего стола) - как вы, наверное, хотите, так как вы хотите отобразить вывод в gnome-terminal
- тогда вы можете сделать это, нажав Alt kbd> + F2 и запустив gnome-session-properties
. Это дает вам возможность редактировать ваши приложения запуска. Введите в поле Command:
следующее:
gnome-terminal --working-directory=/home/mediambient/programa -e ./driver
Или вы можете (в некотором роде) получить лучшее из обоих миров, поместив скрипт в init.d
для запуска при первом запуске Ubuntu, а затем автоматически порождая окно gnome-terminal
, отображающее вывод по мере его выполнения, один раз mediambient
входит в систему графически. Для этого добавьте в Startup Applications запись с помощью этой команды:
gnome-terminal --working-directory=/home/mediambient/programa -x tail -n 512 -f logfile
(Или если logfile
является абсолютным, а не относительным путем к файлу журнала, то вы можете пропустить --working-directory=/home/mediambient/programa
.)
-n 512
означает, что он отображает до 512 строк файла журнала до того, как он начал отображать файл журнала. (Затем будет отображаться каждая строка по мере ее добавления в файл журнала.) Обычно это разумный выбор, поскольку в любом случае окно gnome-terminal
запоминает до 512 строк по умолчанию. Если вы запустите gnome-terminal
с измененным профилем, который запоминает более 512 строк, вы можете соответственно отредактировать команду tail
.
Если вы обеспокоены растущим размером файла журнала, первое, что нужно сделать, это выяснить, действительно ли это может быть проблемой , Вы можете просто быть в состоянии оценить. Предположим, что файл журнала увеличивается на одну строку в секунду (что намного быстрее, чем большинство файлов журнала), и каждая строка имеет длину 80 символов. Затем через месяц размер файла составляет около 200 МБ . Через год он увеличивается примерно до 2,5 ГБ. Пара сотен мегабайт, вероятно, хорошо, а несколько гигабайт, вероятно, нет, поэтому вопрос в том, сможете ли вы вручную редактировать файл журнала, чтобы очистить его, по крайней мере, каждые несколько месяцев?
Если он ближе к одна строка в минуту, затем файл увеличивается со скоростью менее 50 МБ в год , и в этом случае вам, вероятно, никогда не придется беспокоиться об очистке файла.
Есть два простых способа очистить файл. Вы можете отредактировать его и удалить часть (или всю) из него. Или вы можете удалить его, и пусть он будет создан снова. Если вы удалите его, он будет продолжать занимать место на диске до тех пор, пока к нему больше не будет доступа, что означает, что вам может потребоваться перезагрузка driver
. Вам также нужно было бы перезапустить tail
, но вы можете решить эту проблему с помощью модифицированной команды tail
, которая не оставляет файл открытым:
gnome-terminal --working-directory=/home/mediambient/programa -x tail -n 512 --follow=name logfile
(я заменил -f
с --follow=name
.)
Для более сложного или автоматического управления растущими файлами журналов вы можете использовать команду logrotate
. Команда logrotate
проверяет, не превышают ли файлы журнала их максимальный размер или возраст, и «вращает» их, сжимая их в пронумерованные архивы (которые сами в конечном итоге удаляются) и создавая новый файл журнала. logrotate
даже отправит вам электронное письмо о журналах, если вы настроите его для этого. На странице руководства logrotate
объясняется, как писать файлы конфигурации, чтобы сообщить logrotate
, какие журналы будут работать.
Вы можете запустить logrotate
автоматически из пользовательского crontab mediambient
. (В crontab перечислены задачи, которые периодически выполняются демоном cron
.) Команда crontab
устанавливает и работает с пользовательскими crontabs. Или вы можете добавить запись в системный crontab, /etc/crontab
(что было бы разумным выбором, если вы запускаете скрипт в init.d
и запускаете driver
как root
, а не как mediambient
). Обратите внимание, что системные журналы Ubuntu вращаются с помощью logrotate
, хотя в текущей конфигурации Ubuntu по умолчанию он не вызывается напрямую из любого crontab.
Этот обзор ротации журналов с помощью logrotate
и планирования задач с помощью cron
должен помочь вам начать работу, но вы можете задавать более подробные вопросы в AskUbuntu по этим темам или, если хотите, комментировать здесь или редактировать свои вопрос, чтобы предоставить более подробную информацию о том, что вы хотите сделать (тогда я смогу дать более подробные объяснения о том, как это сделать).