Je pense que les deux -c
paramètres ( su
et bash
) devront être cités au minimum.
su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"
On -
s'attend également à ce qu'il soit le dernier et peut ne pas être souhaitable ici (voir man su
).
Encore quelques remarques. sudo
pourrait être un meilleur choix pour une commande à un coup comme la vôtre, mais pas nécessairement:
sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
En particulier, vous pouvez utiliser un niveau de cotation en moins avec sudo
.
Vous devez également faire attention à exécuter des commandes sans chemin absolu dans un contexte privilégié. Cela vaut pour su
(ou sudo
) mais aussi pour le chemin d'accès à bash
dans votre commande. Vous le faites bien avec screen
.
Je viens de tester ce qui suit et cela fonctionne bien. Je pense que -
c'est le principal problème dans votre ligne d'origine:
/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"
Remarque maléfique: pourquoi ne pas tmux
essayer? J'ai récemment changé et je n'ai jamais regardé en arrière. La seule chose que je devais changer immédiatement était la combinaison de touches préfixe qui tmux
par défaut Ctrl+ B- Retour à la GNU screen
de Ctrl+ A.
Il permet de diviser votre fenêtre en un nombre presque arbitraire de volets (verticalement et horizontalement) et son format de fichier de configuration (y compris celui pour le statut par) est en fait intelligible pour les humains. Bien sûr, tmux
c'est aussi bien que screen
lorsque vous voulez simplement exécuter un programme / script non écrit à l'origine en tant que démon en arrière-plan. Cependant, si vous avez l'intention d'interagir avec le multiplexeur de terminaux, je le recommande vivement tmux
.
su
ousudo
?sudo
n'est pas un bon choix s'il est exécuté à partir de rc.local où vous êtes déjà root, car vous manquerez un shell de connexion. Sur une note latérale, jetez un œil à/etc/init/tty1.conf
- remplacer [a] getty par écran ici.sudo su -
...sudo
(superutilisateur do),su
(changer d'utilisateur) ... bonne idée sur le .confsudo
peut très bien démarrer un shell de connexion en utilisant-i
.Essayez
sudo -u username
au lieu desu - username
la source
Voici ce que j'ai utilisé, je l'ai trouvé le plus propre et le plus simple (testé moi-même):
Remplacez "utilisateur" par l'utilisateur pour l'exécuter en tant que. Remplacez "nameyouchoose" comme nom de la session écran Remplacez "/script/start.bash" par le chemin de votre script.
Source: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles
la source