Как запустить скрипт при входе в систему в *nix?
Я знаю, что когда-то знал, как это сделать, но... как запустить скрипт (bash is OK) при входе в unix?
11 ответов:
когда 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
может иметь интересные эффекты :) (его не безопасно Тхо, так что не доверяйте ему слишком много. нет ничего лучше, чем установить оболочку по умолчанию, чтобы быть сценарием, который стирает ваш диск. ... хотя. ,. Я могу представить себе сценарий, где это может быть удивительно полезно)
поместите его в профиль bash:
~/.bash_profile
Launchd
является предпочтительным способом в OS X.если вы хотите, чтобы он работал на вашем логине, поместите его в
~/Library/LaunchAgents
Start
launchd
itemlaunchctl 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
решение:
узнайте $ XDG_CONFIG_DIRS путь:
echo $XDG_CONFIG_DIRS
поместите свой скрипт в этот каталог
добавить запись
/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, или используйте абсолютный путь к файлу сценария.