TL; DR: veya, daha iyi kullanın .sudo -bopenvpn [...] --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
sudoVarsayı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 .
sudoKomutunuzu ç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 nohuptamamen 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, sudokendisini ön planda çalıştırabilir , ancak -bbayrağını sudoileterek 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 -bsen 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 openvpnmuhtemelen sadece onunla birlikte çalışmalısınız --daemon.
openvpn--daemonseçeneği ile çalıştırırsanız arka planda otomatik olarak çalışacaktır :
sudo openvpn ~/my_connection.ovpn --daemon
Dosya --daemonadınızdan .opvnönce değil de geçmek ; Aşağıdaki argüman --daemon, varsa, arka plandaki openvpniş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 openvpnhemen 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 openvpnhiç başlatmak arka planda çalışan ve geri ön plana getirmek istemeyecektir biliyorsun, kuvvetle onu çağırma yöntemi düşünmelisiniz --daemonseçeneği. Bu, özgüdür - çoğu program openvpnbir --daemonseç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, sudokomut 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 sudove bunu yapmak için bir şifre gerekmez. So eğer bunu bir izin örneklerini sudodaha sonra Senaryoda muhtemelen hala iş.)
Eğer herhangi örneği varsa sudoaslı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 openvpnde --daemonseçeneği ile kullanmayı düşünmelisiniz .