Как запустить скрипт при входе в систему в * nix?
Вопрос
Я знаю, что когда-то знал, как это сделать, но...как запустить скрипт (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
Решением было бы:
узнайте путь к файлу $XDG_CONFIG_DIRS:
Эхо $XDG_CONFIG_DIRS
поместите свой скрипт в этот каталог
Добавить запись в /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
запускается при входе в систему.