TL; DR: veya, daha iyi kullanın .sudo -b
openvpn [...] --daemon
Çalışmakta olduğunuzdan openvpn
(ve daha az spesifik olarak, bir programı arka planda kök olarak çalıştırmak istediğinizden ), arka planda komut çalıştırma hakkında en sık kullanılan bilgiler durumunuzu ele almaz. Dedin:
Cpenvpn komutuna bir & eklemeye ve önüne nohop yerleştirmeye çalıştım. Her ikisi de çalışmıyor.
Emriniz:
sudo openvpn ~/my_connection.ovpn
sudo
Varsayılan yapılandırma altında sudo
, aynı bağlamda şifrenizi yakın zamanda girmediyseniz (etkileşimli kullanım için, bu genellikle aynı terminal anlamına gelir), ardından şifrenizi ister. Ancak komutu arka planda ekleyerek çalıştırırsanız, &
o zaman çizgi gösterilmez veya onu yazma fırsatı verilmez.[sudo] password for user:
Bu durumda, komutu çalıştırmak, şifrenizi girmek ve daha sonra arka plana göndermek, etkileşimli kullanım için bunu yapmanın makul bir yoludur .
Ama bu tek yol değil ve dediğiniz gibi, bunu bir komut dosyasında yapmak istemeyeceksiniz .
Yol 1:sudo
Taze bir zaman damgası olduğundan emin olun .
sudo
Komutunuzu çalıştırmak için kullanıldığında, ilk önce şu komutu çalıştırarak geçerli bir zaman damgasına sahip olduğundan emin olabilirsiniz :
sudo -v
Sonra ondan sonra koşabilirsiniz:
sudo openvpn ~/my_connection.ovpn &
Ancak, arka planda bir komut çalıştırmak istediğinizde, tamamen &
ve nohup
tamamen kaçınmak daha iyidir sudo
. Bu özellikle komut dosyası için geçerlidir.
Yol 2: Kullanım sudo -b
. Genel olarak, genellikle istediğiniz budur.
Bunun yerine, sudo
kendisini ön planda çalıştırabilir , ancak -b
bayrağını sudo
ileterek komutun arka planda çalışmasına neden olur.
sudo -b openvpn ~/my_connection.ovpn
Bu genellikle daha iyi bir yoldur, özellikle de komutu bir betiğe koyarsanız. İle sudo -b
sen alamadım iş denetimini , ancak bir kabuk iş kontrolünde varsayılan olarak devre dışıdır ve genellikle bunu kullanmamalısınız .
Açıklandığı gibi man sudo
:
-b, --background
Run the given command in the background. Note that it is not
possible to use shell job control to manipulate background
processes started by sudo. Most interactive commands will
fail to work properly in background mode.
Kadar hiçbir şey arka planda çalışırken, çünkü bu işleri sonra sudo şifrenizi alınan (gerekirse) ve komutu çalıştırmak için izin verildiğini tespit etti.
Yol 3: Fakat bunun için openvpn
muhtemelen sadece onunla birlikte çalışmalısınız --daemon
.
openvpn
--daemon
seçeneği ile çalıştırırsanız arka planda otomatik olarak çalışacaktır :
sudo openvpn ~/my_connection.ovpn --daemon
Dosya --daemon
adınızdan .opvn
önce değil de geçmek ; Aşağıdaki argüman --daemon
, varsa, arka plandaki openvpn
işlemin kullanması gereken ad olarak yorumlanır . (Do not ekleme de &
.)
Bunun uygun olup olmadığı, herhangi bir etkileşimin openvpn
çalıştırılmasından sonra ama arka plan yaratılmasından önce gerçekleşmesi gerekip gerekmediğine bağlıdır . Ve bu , kısmen, ne kurulduğuna bağlı ~/my_connection.ovpn
. Ama eğer openvpn
hemen hemen de kıracak arka planda çalışan, o zaman tüm diğer yollar Artalanda olamazdı .
Bu nedenle, istediğini biliyorum herhangi bir durumda openvpn
hiç başlatmak arka planda çalışan ve geri ön plana getirmek istemeyecektir biliyorsun, kuvvetle onu çağırma yöntemi düşünmelisiniz --daemon
seçeneği. Bu, özgüdür - çoğu program openvpn
bir --daemon
seçeneği desteklemez , ancak birçok sunucu programında böyle bir seçenek vardır. (Ancak, sözdizimi ve adı değişir.)
Bu seçeneği kullanmak (ve bunu nasıl kullanmak istediğinize), ben, size tavsiye edip etmemeye karar vermek kılavuz sayfasını özellikle bölümünde, . Çok sayıda yararlı bilgi var ve buradaki yalnızca ilk paragrafı alıntı yapıyorum:openvpn
--daemon
--daemon [progname]
Become a daemon after all initialization functions are
completed. This option will cause all message and error output
to be sent to the syslog file (such as /var/log/messages),
except for the output of scripts and ifconfig commands, which
will go to /dev/null unless otherwise redirected. The syslog
redirection occurs immediately at the point that --daemon is
parsed on the command line even though the daemonization point
occurs later. If one of the --log options is present, it will
supercede syslog redirection.
The optional progname parameter [...]
Yol 4 : Bazen bütün betiği root olarak çalıştırmak mantıklıdır.
Kök olarak birden fazla eylem gerçekleştiren bir komut dosyanız varsa, kök olarak çalıştırılmayacak kadar makul bir şekilde çalıştırılabilecek önemli bir etkinliği yoktur ve komut dosyasını kök olmayan bir kullanıcı olarak çalıştırmaktan asla yararlı bir şey olmaz. komut dosyasının kullanıcısı muhtemelen sadece root olarak çalıştırılmalıdır.
Bu durumda, sudo
komut dosyasındaki komutlardan kaldırmalısınız . Betik root olarak çalıştığında, buna gerek kalmaz sudo
. (Kök kullanıcı kutu rağmen, varsayılan olarak, kendisini de dahil olmak üzere herhangi bir kullanıcı olarak herhangi bir komutu çalıştırmak sudo
ve bunu yapmak için bir şifre gerekmez. So eğer bunu bir izin örneklerini sudo
daha sonra Senaryoda muhtemelen hala iş.)
Eğer herhangi örneği varsa sudo
aslında kökü daha (ile diğer bazı kullanıcı olarak komutları çalıştırmak için kullanılır komut ), sonra yine tutmalı bu örnekleri.-u user
Komut dosyasının tamamı kök olarak çalıştırılıyorsa, komutları arka planda çalıştırmanın tipik yollarının çoğu, ekleme &
ve nohup
(gerekirse bildiğiniz) kullanımı da dahil olmak üzere uygulanır . Bunun için, yine openvpn
de --daemon
seçeneği ile kullanmayı düşünmelisiniz .