it-swarm.com.ru

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

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

68
Nate

От Википедия Bash

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

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

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

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

110
Svet

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

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

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

echo $Shell

из подсказки.

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

27
pjz

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

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

9
Michael Johnson

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

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

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

5
Kent Fredric

Я был разочарован этой проблемой в течение нескольких дней. Ничего не работает на 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
user568021

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

~/.bash_profile
3
gbjbaanb

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

3
Craig B.

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
Milhous

Найдите на справочной странице 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
jtimberman

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

2
ConcernedOfTunbridgeWells

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

1
William Keller