GNU/Linux >> Znalost Linux >  >> Linux

Jak spustit příkaz jako konkrétní uživatel ve skriptu init?

Pokud máte start-stop-daemon

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

U init skriptů ve stylu systemd je to opravdu snadné. Stačí přidat User=v sekci [Service].

Zde je init skript, který používám pro qbittorrent-nox na CentOS 7:

[Unit]
Description=qbittorrent torrent server

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

[Install]
WantedBy=multi-user.target

Na systémech RHEL /etc/rc.d/init.d/functions skript je určen k poskytování podobného tomu, co chcete. Pokud to zadáte jako zdroj v horní části vašeho init skriptu, všechny jeho funkce budou dostupné.

Specifická funkce, která vám s tím pomůže, je daemon . Pokud jej zamýšlíte použít ke spuštění programu podobného démonu, jednoduché použití by bylo:

daemon --user=username command

Pokud je to příliš náročné na to, co potřebujete, existuje runuser (viz man runuser pro úplné informace; některé verze mohou potřebovat -u před uživatelským jménem):

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

Místo sudo , zkuste

su - username command

Podle mých zkušeností sudo není vždy k dispozici na systémech RHEL, ale su je, protože su je součástí balíčku coreutils, zatímco sudo je v balíčku sudo.


Linux
  1. Jak vytvořit skript příkazu Linux

  2. Jak spustit skript??

  3. Jak mohu spustit funkci ze skriptu v příkazovém řádku?

  1. Spusťte část bash skriptu jako jiný uživatel

  2. Jak dosáhnout toho, aby se pro konkrétní proces spustil pouze uživatel, pid a příkaz? (Ubuntu 11.10)

  3. Spusťte skript prostředí jako jiný uživatel

  1. Jak provést příkaz před přihlášením uživatele v systému Linux?

  2. CentOS / RHEL :Jak zjistit, který uživatel spouští konkrétní příkaz?

  3. Jak používat sudo k tomu, aby uživatel bez oprávnění root mohl spustit konkrétní příkaz