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


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

11 65

11 ответов:

с wikipedia Bash

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

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

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

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

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

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

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

echo $SHELL

от быстрый.

при использовании Bash, первый из ~/.bash_profile,~/.bash_login и ~/.profile будет работать для интерактивной оболочки. Я верю ~/.profile обычно выполняется оболочками Unix, кроме 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 является предпочтительным способом в OS X.

если вы хотите, чтобы он работал на вашем логине, поместите его в ~/Library/LaunchAgents

Start launchd item

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

Stop item

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 / профиль, все это разбилось при попытке входа в систему. Я не мог использовать "запуск приложений", так как это было не то, что я хотел. Это только устанавливает сценарий для текущего пользователя.

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

решение:

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

    echo $XDG_CONFIG_DIRS

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

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

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

man bash
/^INVOCATION

также в разделе Файлы

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

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

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