GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire un comando come utente specifico in uno script init?

Se hai start-stop-daemon

start-stop-daemon --start --quiet -u username -g usergroup --exec command ...

Per gli script init in stile systemd è davvero facile. Basta aggiungere un User=nella sezione [Servizio].

Ecco uno script init che uso per qbittorrent-nox su CentOS 7:

[Unit]
Description=qbittorrent torrent server

[Service]
User=<username>
ExecStart=/usr/bin/qbittorrent-nox
Restart=on-abort

[Install]
WantedBy=multi-user.target

Sui sistemi RHEL, il /etc/rc.d/init.d/functions script ha lo scopo di fornire qualcosa di simile a quello che vuoi. Se lo inserisci all'inizio del tuo script init, tutte le sue funzioni diventano disponibili.

La funzione specifica fornita per aiutare con questo è daemon . Se hai intenzione di usarlo per avviare un programma simile a un demone, un semplice utilizzo potrebbe essere:

daemon --user=username command

Se è troppo pesante per ciò di cui hai bisogno, c'è runuser (vedi man runuser per tutte le informazioni; alcune versioni potrebbero richiedere -u prima del nome utente):

/sbin/runuser username -s /bin/bash -c "command(s) to run as user username"

Invece di sudo , prova

su - username command

Nella mia esperienza, sudo non è sempre disponibile sui sistemi RHEL, ma su è perché su fa parte del pacchetto coreutils mentre sudo è nel pacchetto sudo.


Linux
  1. CentOS / RHEL:come trovare quale utente esegue un comando specifico?

  2. Come utilizzare sudo per consentire a un utente non root di eseguire un comando particolare

  3. Come disabilitare un comando specifico per un utente specifico in Linux

  4. Come posso eseguire una funzione da uno script nella riga di comando?

  5. Esegui parte di uno script bash come utente diverso

Come eseguire il comando / script della shell di Linux in background

Come creare utenti in Linux (comando useradd)

Come eseguire un comando per un tempo specifico in Linux

Come eseguire uno script Python in PHP

Come eseguire uno script Bash

Come eseguire un comando in uno script della shell?