Rc.local'dan önyükleme sırasında bir ekran oturumu çalıştırın


10

Önyükleme üzerinde rc.local belirli bir kullanıcı altında müstakil bir ekran çalıştırmaya çalışıyorum. Aşağıdaki kod şimdiye kadar sahip olduğum şey, ama benim için çalışmıyor. Su kısmı bana bir hata veriyor gibi görünüyor.

su - username -c /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'

Yanıtlar:


13

Her iki -cparametrenin ( suve bash) minimum olarak alıntılanması gerektiğini düşünüyorum.

su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"

Ayrıca -sonuncu olması beklenir ve burada istenmeyebilir (bkz. man su).


Birkaç açıklama daha. sizinki gibi bir kerelik bir komut için daha iyi bir seçim sudo olabilir , ancak mutlaka:

sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'

Özellikle, daha az bir alıntılama seviyesi ile kullanabilirsiniz sudo.

Dikkatli olmak istediğiniz başka bir şey, ayrıcalıklı bir bağlamda mutlak yol olmadan komutları yürütmektir. Bu komut su(veya sudo) için değil aynı zamanda bashkomutunuzdaki yol için de geçerlidir. İle doğru yapıyorsun screen.

Sadece aşağıdakileri test etti ve güzel çalışıyor. -Orijinal hattınızdaki ana sorun olduğunu düşünüyorum :

/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"

Kötü açıklama: neden tmuxdenemiyorsun? Geçenlerde değişti ve asla geri baktım. Hemen değiştirmem gereken tek şey, tmuxvarsayılan olarak Ctrl+ B- geri GNU screen's Ctrl+ ' ya olan önek tuş kombinasyonuydu A.

Pencerenizi neredeyse rastgele sayıda bölmeye (dikey ve yatay olarak) bölmeye izin verir ve yapılandırma dosyası biçimi (durum par için olanı da içeren) aslında insanlar tarafından anlaşılabilir. Tabii ki tmux, screenarka planda daemon olarak yazılmayan bazı programları / komut dosyalarını çalıştırmak istediğinizde olduğu kadar iyidir . Bununla birlikte, terminal çoklayıcı ile etkileşime girmeyi planlıyorsanız, sıcak bir şekilde tavsiye ederim tmux.


Birkaç tanesinde bunu deneyeceğim. Ben mutlak yolları kullanır çalıştırıyorum komut, bu nedenle tavsiye ediyorum suya sudo?
ATLChris

1
sudobir giriş kabuğunu kaçıracağınız için zaten root olduğunuz rc.local'dan çalıştırıyorsanız iyi bir seçim değildir. Bir yan not olarak, /etc/init/tty1.conf[a] getty'yi ekranla değiştirin.
aquaherd

@aquaherd: Ben yazarken aklımda olan şeydi ama zorunlu değil . İpucu, gerçekten, her zamanki gibi sudo su -... sudo(süper kullanıcı yapmak), su(kullanıcı değiştir) ... .conf hakkında iyi fikir
0xC0000022L

1
Söylemeliyim ki, sadece kötü sözün yüzünden bu gönderiyi + 1 yapıyorum. Onu seviyorum! Yeni bir oturum başlatmaya zorlayabileceğinden, ekranın mükemmel bir yerine geçer.
Kuantum Fizikçisi

@ aquaherd sudokullanarak bir giriş kabuğu başlatabilirsiniz -i.
muru


1

İşte kullandığım en temiz ve en basit olduğunu gördüm (kendimi test ettim):

"User" ifadesini çalıştırmak için kullanıcı ile değiştirin. Ekran oturumunun adı olarak "nameyouchoose" ifadesini, "/script/start.bash" komut dosyasını komut dosyanızın yoluyla değiştirin.

/usr/bin/sudo -u user /usr/bin/screen -dmS nameyouchoose /script/start.bash

Kaynak: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles


0

Komut dosyasını yeni bir bağımsız ekranda geçerli kullanıcı olarak başlatma (rc.local = root):

screen -dmS <session name> <command>, misal:

screen -dmS screenName bash /home/user/run.sh


Rc.local'dan bir komut dosyası başlatma user:

runuser -l user -c 'screen -dmS screenName bash /home/user/run.sh'

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.