Как запустить скрипт при входе в систему в * nix?

StackOverflow https://stackoverflow.com/questions/97137

Вопрос

Я знаю, что когда-то знал, как это сделать, но...как запустить скрипт (bash в порядке) при входе в систему в unix?

Это было полезно?

Решение

От удар по википедии

Когда запускается Bash, он выполняет команды во множестве различных скриптов.

Когда Bash вызывается как интерактивная оболочка входа в систему, она сначала считывает и выполняет команды из файла /etc/profile, если этот файл существует.После прочтения этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile, в таком порядке, и считывает и выполняет команды из первой той, которая существует и доступна для чтения.

Когда оболочка входа завершается, Bash считывает и выполняет команды из файла ~/.bash_logout, если он существует.

Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, Bash считывает и выполняет команды из ~/.bashrc, если этот файл существует.Это может быть заблокировано с помощью опции --norc.Параметр --rcfile file заставит Bash считывать и выполнять команды из file вместо ~/.bashrc.

Другие советы

При входе в систему большинство оболочек выполняют сценарий входа в систему, который вы можете использовать для выполнения вашего пользовательского сценария.Сценарий входа в систему, который выполняет оболочка, зависит, конечно, от оболочки:

  • удар:.bash_profile, .bash_login, .profile (для обратной совместимости)
  • ш:.профиль
  • tcsh и csh:.войти в систему
  • зш:.zshrc

Вероятно, вы можете узнать, какую оболочку используете, выполнив

echo $SHELL

из командной строки.

Для более широкого определения "входа в систему" полезно знать, что в большинстве дистрибутивов при запуске X ваш .xsessionrc будет выполняться при запуске вашего X-сеанса.

При использовании Bash первый из ~/.bash_profile, ~/.bash_login и ~/.profile будет запущен для интерактивной оболочки входа в систему.Я верю ~/.profile обычно запускается оболочками Unix, помимо Bash.Bash будет запущен ~/.bashrc для интерактивной оболочки без входа в систему.

Обычно я помещаю все, что хочу всегда устанавливать .bashrc а затем запустите его из .bash_profile, где я также настроил несколько вещей, которые должны запускаться только при входе в систему, например, настройку ssh-agent или бегущий screen.

Если ты хочешь убежать один сценарий и Только одним скриптом вы можете сделать его оболочкой пользователей по умолчанию.

echo "/usr/bin/uptime" >> /etc/shells
vim /etc/passwd  
  * username:x:uid:grp:message:homedir:/usr/bin/uptime

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

Если вы используете OSX, то это ~/.profile

Поместите его в свой профиль bash:

~/.bash_profile

Launchd является ли a предпочтительным способом в OS X.

Если вы хотите, чтобы он запускался при вашем входе в систему, введите его в ~/Library/LaunchAgents

Начать launchd предмет

launchctl load /Library/LaunchDaemons/com.bob.plist

Остановить элемент

launchctl unload /Library/LaunchDaemons/com.bob.plist

Пример com.bob.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.bob</string>
<key>RunAtLoad</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/java</string>
<string>-jar</string>
<string>/Users/user/program.jar</string>
</array>
</dict>
</plist>

Я был разочарован этой проблемой в течение нескольких дней.В ubuntu ничего не работало.Если я помещу вызов в /etc/profile, все это завершится сбоем при попытке входа в систему.Я не мог использовать "Startup Applications", поскольку это было не то, чего я хотел.Это устанавливает сценарий только для этого текущего пользователя.

Наконец-то я нашел эту небольшую статью: http://standards.freedesktop.org/autostart-spec/autostart-spec-0.5.html

Решением было бы:

  1. узнайте путь к файлу $XDG_CONFIG_DIRS:

    Эхо $XDG_CONFIG_DIRS

  2. поместите свой скрипт в этот каталог

Добавить запись в /etc/profile это запускает скрипт.Это будет выполняться при каждом входе в систему.Если вы делаете это только для своей учетной записи, используйте один из ваших сценариев входа в систему (например .bash_profile), чтобы запустить его.

Найдите на справочной странице bash вашей локальной системы запрос ^ для получения информации о том, какой файл будет считан при запуске.

man bash
/^INVOCATION

Также в разделе ФАЙЛЫ,

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

Добавьте свой скрипт в соответствующий файл.Убедитесь, что скрипт находится в файле $PATH, или используйте абсолютный путь к файлу скрипта.

Сценарий ~/.bash_profile запускается при входе в систему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top