linux - inicio - ¿Cómo se ejecuta un script al iniciar sesión en*nix?
script de inicio de sesion ubuntu (11)
Sé que una vez sé cómo hacer esto, pero ... ¿cómo se ejecuta un script (bash está bien) al iniciar sesión en Unix?
Agregue una entrada en /etc/profile
que ejecute el script. Esto se ejecutará durante cada inicio de sesión. Si solo está haciendo esto para su propia cuenta, use uno de sus scripts de inicio de sesión (por ejemplo, .bash_profile
) para ejecutarlo.
Al iniciar sesión, la mayoría de las shells ejecutan un script de inicio de sesión, que puede usar para ejecutar su script personalizado. El script de inicio de sesión que ejecuta el shell depende, por supuesto, del shell:
- bash: .bash_profile, .bash_login, .profile (para compatibilidad con versiones anteriores)
- sh: .profile
- tcsh y csh: .login
- zsh: .zshrc
Probablemente puedas descubrir qué caparazón estás usando al hacer
echo $SHELL
del prompt.
Al usar Bash, se ejecutará el primero de ~/.bash_profile
, ~/.bash_login
y ~/.profile
para un shell de inicio de sesión interactivo. Creo ~/.profile
generalmente es ejecutado por shells de Unix además de Bash. Bash ejecutará ~/.bashrc
para un shell interactivo que no sea de inicio de sesión.
Normalmente pongo todo lo que quiero establecer siempre en .bashrc
y luego lo ejecuto desde .bash_profile
, donde también configuro algunas cosas que deberían ejecutarse solo cuando estoy iniciando sesión, como configurar ssh-agent
o ejecutar la screen
.
Busque en la página del manual de bash de su sistema local ^ INVOCATION para obtener información sobre qué archivo se leerá al inicio.
man bash
/^INVOCATION
También en la sección de ARCHIVOS,
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
Agregue su secuencia de comandos al archivo correcto. Asegúrese de que el script esté en $ PATH, o use la ruta absoluta al archivo de script.
Colócalo en tu perfil de bash :
~/.bash_profile
Cuando se inicia Bash, ejecuta los comandos en una variedad de scripts diferentes.
Cuando Bash se invoca como un shell de inicio de sesión interactivo, primero lee y ejecuta comandos desde el archivo / etc / profile, si ese archivo existe. Después de leer ese archivo, busca ~ / .bash_profile, ~ / .bash_login, y ~ / .profile, en ese orden, y lee y ejecuta comandos del primero que existe y que es legible.
Cuando sale un shell de inicio de sesión, Bash lee y ejecuta comandos del archivo ~ / .bash_logout, si existe.
Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, Bash lee y ejecuta comandos de ~ / .bashrc, si ese archivo existe. Esto puede inhibirse al usar la opción --norc. La opción de archivo --rcfile obligará a Bash a leer y ejecutar comandos desde el archivo en lugar de ~ / .bashrc.
El script ~/.bash_profile
se ejecuta al iniciar sesión.
Estaba frustrado con este problema por días. Nada funcionó en ubuntu. Si puse la llamada en / etc / profile, todo se bloqueó al intentar iniciar sesión. No pude usar "Aplicaciones de inicio" porque eso no era lo que quería. Eso solo establece la secuencia de comandos para ese usuario actual.
Finalmente encontré este pequeño artículo: http://standards.freedesktop.org/autostart-spec/autostart-spec-0.5.html
La solución sería:
averigua la ruta $ XDG_CONFIG_DIRS:
echo $ XDG_CONFIG_DIRS
pon tu script en ese directorio
Si desea ejecutar una secuencia de comandos y solo una secuencia de comandos, puede hacerlo que el shell predeterminado de los usuarios.
echo "/usr/bin/uptime" >> /etc/shells
vim /etc/passwd
* username:x:uid:grp:message:homedir:/usr/bin/uptime
puede tener efectos interesantes :) (aunque no es seguro, no confíe demasiado en ello, nada como configurar el shell predeterminado para que sea un script que borre su disco ... aunque, ... me imagino un escenario donde eso podría ser increíblemente útil)
Si estás en OSX, entonces es ~/.profile
Launchd
es la forma preferida en OS X.
Si desea que se ejecute en su inicio de sesión, colóquelo en ~/Library/LaunchAgents
Comience a launchd
artículo
launchctl load /Library/LaunchDaemons/com.bob.plist
Detener elemento
launchctl unload /Library/LaunchDaemons/com.bob.plist
Ejemplo 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>