LINUX.ORG.RU

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

 


0

1

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

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


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

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

★★★★★

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

А что не так?
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 ★★★★★
() автор топика

например

раз ~/.config/autostart два systemd user unit

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

Мне надо ехать с шашечками, без них не едет.
Я серьезно, просто долго рассказывать об уникальной ситуации.

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

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

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

cp foo.desktop ${HOME}/.config/autostart

anonymous
()
Ответ на: комментарий от 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
()

Только systemd, без вариантов. Все остальное – нестандартно и поэтому будет трудно поддерживать.

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

man

gdb -c core -batch bt


          |U|      
          | |      
          | |      
         _| |_     
        | | | |-.  
       /|     ` |  
      | |       |  
      |         |  
      \         /  
       |       |   
       |       |       
anonymous
()
Ответ на: комментарий от i586

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

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

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

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

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

Ну, пока не хотелось бы превращать консольную утилиту в сервис, запускаю ее под скрином.
Хотя, может и отстал от жизни.

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

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

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

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

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

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

Крайне спорное утверждение. Именно утверждение. Не катит.

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

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

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

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

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

Выше я четко написал, почему так лучше.

А в холиварах не участвую.

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

gremlin_the_red

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

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

chukcha ★★★★★
() автор топика
Последнее исправление: chukcha (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.