Как запустить скрипт при входе в систему * nix? - PullRequest
68 голосов
/ 19 сентября 2008

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

Ответы [ 11 ]

110 голосов
/ 19 сентября 2008

С Википедия Bash

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

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

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

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

27 голосов
/ 19 сентября 2008

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

  • bash: .bash_profile, .bash_login, .profile (для обратной совместимости)
  • sh: .profile
  • tcsh и csh: .login
  • zsh: .zshrc

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

echo $SHELL

из приглашения.

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

9 голосов
/ 19 сентября 2008

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

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

5 голосов
/ 19 сентября 2008

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

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

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

3 голосов
/ 29 апреля 2015

Я был разочарован этой проблемой в течение нескольких дней. Ничего не работает на Ubuntu. Если я помещаю вызов в / etc / profile, все это падает при попытке входа в систему. Я не мог использовать «Startup Applications», так как это было не то, что я хотел. Это только устанавливает скрипт для этого текущего пользователя.

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

Решение будет:

  1. найдите путь $ XDG_CONFIG_DIRS:

    echo $ XDG_CONFIG_DIRS

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

3 голосов
/ 19 сентября 2008

Launchd является предпочтительным способом в 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>
3 голосов
/ 19 сентября 2008

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

3 голосов
/ 19 сентября 2008

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

~/.bash_profile
2 голосов
/ 19 сентября 2008

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

man bash
/^INVOCATION

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

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

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

2 голосов
/ 19 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...