LINUX.ORG.RU

Элегантный способ автозапуска консольного приложения в фоне

 


0

1

Пока использую такой способ автозапуска, который втыкаю в crontab:

@reboot<----->/home/pupkin/application --foreground --config=/home/pupkin/application.cfg


Он, конечно, работает, но лично мне этот костыль не нравится.
Какой-то reboot - при чем тут ребут и cron, если нужен автозапуск?

Может, есть более элегантный спосоп автозапуска?

★★★

А что не так?
man 5 crontab:

EXTENSIONS
       These special time specification "nicknames" which replace the 5 initial time and date fields, and are pre‐
       fixed with the '@' character, are supported:

       @reboot    :    Run once after reboot

По-моему, от автозапуска не отличается.

Ну хотите, напишите systemd-шный сервис, который это приложение будет запускать. Или в rc.local добавьте, если он у вас есть. Или в .xinitrc, если xorg запускаете. Вариантов много.

Лично я сам ленивый, и все скидываю в последний.

zippocat ()
Ответ на: комментарий от zippocat

А что не так?

А то, что употреблена команда '@reboot', а не, например, какая-нибудь '@autostart'

Это было бы логичнее и лучше понималось.

Ведь на самом деле никакого ребута тут не делается, причем тут вообще какая-то постороняя для данного случая команда 'reboot' ?

chukcha ★★★ ()
Ответ на: комментарий от chukcha

@reboot просто так сложились слова у автора этого когда-то нововедения в cron.
мож кому и не логично, но все прекрасно работает и ладушки.
прими как данность и используй по необходимости.
но системд юнит ли rc скрипт лучше.

pfg ★★★★ ()
Последнее исправление: pfg (всего исправлений: 2)
Ответ на: комментарий от chukcha

причем тут вообще какая-то постороняя для данного случая команда 'reboot' ?

При том, что в данном контексте @reboot - это не команда, а один из идентификаторов времени запуска твоей команды.
Возможно, при написании крона и рассматривали разные варианты его названия, но выбрали вот такой. С таким же успехом его могли назвать и просто @boot.

blexey ★★★★★ ()

Может, есть более элегантный спосоп автозапуска?

Тебе надо для входа в консоль или в X-ы?

Если первое, то:

cat ~/.bashrc
...
if [ -f ~/.bash_autostart ]; then
    . ~/.bash_autostart
fi
...
cat ~/.bash_autostart
/home/pupkin/application --config=/home/pupkin/application.cfg &

Если второе, то:

cat ~/.config/autostart/conky.desktop
[Desktop Entry]
Type=Application
Name=Conky
Comment=Start conky indicator
Exec=conky &
Terminal=true
Categories=X;
StartNotify=false
anonymous ()
Ответ на: комментарий от i586

i586 Так можно договориться до того, что без системд нормальный автозапуск невозможен, и вообще, без него даже Линукса не существовало - весь свет сошелся на этом системд! :))

А мыслить категориями System V уже что, совсем разучились?

chukcha ★★★ ()
Ответ на: комментарий от chukcha

тогда убери из заголовка слово «элегантный», раз хочешь обложиться костылями.
чтоб ты знал systemd есть в большинстве дистров, позволяет не только тупо запускать сервисы, но и соблюдать их зависимости, а так же перезапускать упавшие сервисы.

Deleted ()
Ответ на: комментарий от chukcha

А мыслить категориями System V уже что, совсем разучились?

А зачем ими мыслить? Эти категории устаревшие и неактуальные. И хрен его знает, какая там у них гарантия работы в современных дистрибутивах.

Unit-файл для systemd это наиболее удобное и практичное решение.

EXL ★★★★★ ()
Ответ на: комментарий от chukcha

А мыслить категориями System V уже что, совсем разучились?

А зачем мыслить устаревшими категориями? А то потом начинают всякие в кронтаб ручками лезть. Что неправильно. Во-первых, потому что современные методы работы с конфигами подразумевают добавление пользовательских настроек в отдельные файлы в .d/ каталогах и неизменный основной конфиг. Во-вторых, когда добавляли @reboot в крон, это кому-то казалось хорошей идеей, но сейчас это явно не так. Потому что нет механизма зависимостей (и, если команде нужна, например, сеть, то её может ещё не быть, причём, из-за распараллеливания запуска сервисов, это может случаться через раз и отладка может стать весьма весёлым делом). В-третьих, самое главное, если, как ты сделал, пихать туда демона, то у тебя в системе появляется демон, которым не управляет инит (а должен), его нельзя штатно перезапустить, его нельзя штатно остановить.

А как тогда правильно? Зависит от задачи. Если надо запускать графическую программу, то для этого есть автозапуск через XDG Autostart. Если надо запускать демона, который работает от пользователя и нужен только пользователю, то в systemd для этого есть пользовательские сервисы, запускающиеся при логине пользователя в систему (если у вас не systemd и нет похожей фичи, спросите у разрабов вашего инита «чому он такой убогий?»). Если же демон должен работать вне зависимости от залогиннености пользователя, то есть общесистемные сервисы.

gremlin_the_red ★★ ()
Ответ на: комментарий от gremlin_the_red

gremlin_the_red

Потому что нет механизма зависимостей (и, если команде нужна, например, сеть, то её может ещё не быть, причём, из-за распараллеливания запуска сервисов, это может случаться через раз и отладка может стать весьма весёлым делом).

Ооо, какое ценное замечание, вот спасибо!
А то запуск в кроне этим @ребутом часто вызывает такие артерфакты, что до сих пор не понял, откуда они берутся :(

chukcha ★★★ ()
Последнее исправление: chukcha (всего исправлений: 1)