Запустить банку при запуске во всех системах на основе * nix

У меня есть файл jar, который мне нужно запустить при запуске во всех дистрибутивах Linux. Мой предыдущий вопрос здесь , дал мне идею грубой идеи на X-серверах. Поскольку я не смог выполнить запуск, я перешел к идее добавления файла .desktop в /etc/xdg/autostart . Это работает для ubuntu, и в настоящее время я тестирую его в Linux Mint и в версиях cinnamon и mate. Я сделал небольшое исследование для других дистрибутивов, но у них нет /etc/xdg/autostart вместо этого у них есть /xdg-autostart но мне нужно запустить файл jar во всех дистрибутивах Linux. Я пробовал crontab, но @reboot не работал в ubuntu 14.04 для меня. Еще одна проблема заключается в том, что мне нужно удалить файл, который я помещаю для запуска, когда я удаляю банку. Если я отредактирую rc.local, я не смогу отменить редактирование. Есть ли общий способ, с помощью которого я могу запускать в Linux?

Универсального метода создания системной службы на всех дистрибутивах GNU / Linux нет, поскольку они используют множество систем инициализации. Когда-то они все использовали более или менее тот же самый стиль в стиле SysV (за исключением тех, которые использовали более стильную систему BSD), что позволяло писать общие сценарии инициализации, которые не нуждались бы в небольшой модификации от дистрибутива до дистрибутива.

В настоящее время SysV по-прежнему используется рядом дистрибутивов, таких как Debian и RHEL / CentOS. Однако новые системы init – systemd (Fedora, Arch, et al.) И upstart (Ubuntu) 1 включают механизмы обратной поддержки сценариев инициализации стиля SysV, поэтому, если вы ищете метод, наиболее легко используемый для использования на большинстве систем, это все равно.

Имейте в виду, что «linux» не является операционной системой в том смысле, что «Windows 8» или «OSX» являются операционными системами. Linux – это ядро ​​ОС, используемое на самых разных платформах (например, Android); в разговорной речи «GNU / Linux» относится к совокупности дистрибутивов ОС, рассмотренных выше, но они не все одинаковы. Нет никакого серьезного намерения или желания объединить их, так же как нет серьезного намерения или желания объединить Windows и OSX, чтобы, например, кто-то мог спросить: «Как я могу запустить файл jar при запуске как на OSX, так и на Windows? " – вам не повезло, вам нужно будет упаковать их отдельно для каждого из них. То есть, фактически, как распространено программное обеспечение в мире Linux; есть отдельные пакеты для каждого дистрибутива.

1 BUT Ubuntu (и Debian) перемещаются в systemd , то есть выскочка, скорее всего, исчезнет, ​​и большинство основных дистрибутивов будет иметь общую систему init.

К сожалению, я не верю, что существует единый универсальный способ добиться именно того, что вы хотите. Каждый nix имеет систему init, и там есть различные системы инициализации (SysV, Upstart, systemd и т. Д.). Теперь у systemd есть определенная поддержка для запуска демонов SysV, поэтому вы можете уйти с написанием сценария SysV и заставить его работать для обоих, но я не знаю, как это будет стоить с помощью Upstart и других систем. Я вижу два направления действий, которые могут помочь вам в достижении вашей цели:

  1. Напишите службу для каждой основной системы инициализации (обратите внимание, что многие дистрибутивы переключаются на systemd, так что это может быть полезно для начала).

  2. Откажитесь от запуска при загрузке и попробуйте запустить его чуть позже.

Например, хотя системы init все еще довольно фрагментированы, вход в систему очень универсален. Вы можете добавить пару строк в каждый $HOME/.shellrc запускающий банку, если она еще не была запущена. Это будет гораздо меньше работы и гораздо более универсальным.

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

Обратите внимание, что если это банкомат GUI, тогда у вас будет много дополнительных головных болей (создание X или Wayland, чтобы ваша банка могла работать, добавит несколько строк, по крайней мере, к любому решению, которое вы решите ).