Kapatma komutunu kaldırmak için en iyi yol, ancak yeniden başlatmaya devam et


27

Bir veri merkezinde raspi tipi bir cihaza sahibim ve son zamanlarda yanlışlıkla yağ parmaklı ve bir kapatma komutunu ekranımdaki yanlış terminale yapıştırdım. Seçenekleri tutup shutdown -rkaldırmanın bir yolu var mı #poweroff #shutdown -P -H?

shutdown -r Komuta etmek istiyorum . Sistemi dondurmayı başarırsam veya kendimi ip tablo kuralları ile kilitlersem bir zamanlayıcı koymak isterim. örnekshutdown -r +10

Yanıtlar:


39

Sistem tabanlı bir Linux dağıtımı kullanıyor olmalısınız. Bu durumda, güç hedefini maskeleyebilmeniz gerekir, böylece sistemd bunu gerçekleştirmeyi reddeder (ve kapatır). Örneğin:

systemctl mask poweroff.target

Bu, sistemi yeniden başlatmanın haricinde kapatmayı tamamen imkansız kılar. Hiçbir şeyin olmadığını görün:

Debian9 animasyonlu demo

Bu durumda, bu VM'nin sanal güç anahtarı sistemi artık kapatmak için çalışmaz. Ama yine de mükemmel şekilde yeniden başlatılıyor.

Değişikliği geri almak için elbette hedefin maskesini kaldırın. Ardından sistemi kapatabilirsiniz.

systemctl unmask poweroff.target

2
Bütün hizmetleri / hedefleri / cihazları tanımlarıyla (varsa) listeleyen bir systemd komutu var mı? Geçenlerde bunu okumaya başladım ve olasılıkları keşfetmeyi çok isterim.
hjpotter92

1
@ hjpotter92 Bağımsız systemctldeğişkenlerle çalıştırın . Tüm aktif birimleri, durumlarını ve açıklamalarını listeler. Ekle --allve aktif olmayan birimleri de listeler.
Michael Hampton

2
@ hjpotter92 Bir göz atın man systemd.special.
TooTea

16

Bunu başarmanın birkaç yolu vardır. Biri komutu sudo ile çalıştırmayı ve bir şifre girmeyi gerektiren ayrıcalıklı olmayan normal bir hesapla çalışıyor olacaktı. Sonra follwing'i / etc / sudoers dizinine ekleyebilirsiniz (visudo çalıştırarak):

## user is allowed to execute reboot -r only
jdoe ALL=NOPASSWD: /sbin/shutdown -r *

Ayrıca, sudo kimlik bilgilerini önbelleğe almayı devre dışı bırakmak için aşağıdakileri de ekleyin:

Defaults timestamp_timeout=0

Bu, daha önce sudo ile bir komut başlattığınız için önbelleğe alma kimlik bilgilerini engelleyecektir.

Örnek:

[root@ops ~]# su - jdoe
[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:
[jdoe@ops ~]$ sudo shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 18:51:13 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ sudo shutdown -H
[sudo] password for jdoe:
^[[A[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:

Yukarıdaki örnekte, çalıştırırken şifremi girmeme gerek olmadığına dikkat edin sudo shutdown -r +10, ama geri kalanı için. Komuttan ( sudo shutdown -r +10) önce sudo yazma gereksinimini kaldırmak istiyorsanız , .bash_profile veya .bashrc dosyasına aşağıdakileri ekleyin:

alias shutdown="sudo shutdown"

Örnek:

[jdoe@ops ~]$ source ~/.bash_profile
[jdoe@ops ~]$ shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 19:03:14 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ shutdown -c
[sudo] password for jdoe:

Ayrıcalıklı olmayan bir hesapla çalışmanın ve gerektiğinde sudo ile tırmanmanın en iyi yöntem olduğunu unutmayın.


1
Bu harika, sudoçünkü varsayılan yapılandırma ilk çalıştırmadan sonra bir süre kimlik bilgilerini önbelleğe alacaktır. rootBir kullanıcı oturumunda gerektiği gibi komutların tekrar tekrar yürütülmesi durumunda bu uygun olabilir . Böyle bir oturumda (ya da gerçekten, eğer bir rootkabuk çalışıyorsa), komutu değiştirmek shutdownve kontrolleri atlamak tamamen mümkün olacaktır .
Kozmik Ossifrage

Giriş için teşekkürler. Ancak bu durumda, biz yapılandırıyoruz shutdown -riçin değil o çalıştırırsa, bu nedenle, sudo ile çalıştırırken parola istemi sudo shutdown -r ...girdikleri olmayacak çünkü kimlik bilgileri önbelleğe alınmayacaktır. Yukarıda verdiğim örneğe bakın. Bunu koştuğumu görebiliyorsunuz sudo shutdown -Hve ardından bir şifre girmem istendi.
John Doe

3
Aslında, anlaşıldı. Ancak, son komutun ön ekinin sudoverildiği ve bir NOPASSWDişlem olmadığı senaryosunu düşünün ; örneğin, bir config dosyasını root olarak düzenlemek için yapılan bir çağrı. Bu durumda, şifre önbelleğe alınacak ve daha sonra yapılacak bir çağrı yapılacaktı sudo shutdown -H. sudoBunu önlemek için şifre önbelleğe almanın devre dışı bırakılması gerekir.
Kozmik Ossifrage

2
Bu durumda haklısın, şifre önbelleklemeyi devre dışı bırakmak için + 1. Öneri ile yorumumu düzenledi. Teşekkürler!
John Doe

2
Aslında bundan hiç hoşlanmadım, tam olarak, sudo şifresi isteminin varlığına, kullanıcının yapmaması gerekeni yapmamasını söyleyen bir şey olduğunu hatırlatması gerektiğine güveniyor. Ancak şifre istemi gerçekten bu amaca hizmet etmiyor. O kadar sık ​​sorulur sudoki, sadece şifreyi yazıp devam ederiz. Sudo kullanarak alternatif bir yaklaşım için buraya bakın (çok iyi olmamasına rağmen muhtemelen çok daha iyi).
Michael Hampton

10

Kapatmak veya yeniden başlatmak istediğiniz makinenin ana bilgisayar adını belirtmenizi gerektiren molly-guard adı verilen bir araç var .

Debian'ı kullanmamanız durumunda, programın ilkel olduğu düşünülürse, bunu kaynaktan derlemek önemsiz olmalıdır.


9

Zaten takma adlarını kurmak aksilikler RHEL tabanlı dağılımları önlemek için rm, cpve mvkök kullanıcı tarafından gerçekleştirilen zaman biraz daha yıkıcı olabilen.

Örneğin, kendinizinkini ekleyebilirsiniz:

#/root/.bashrc
alias poweroff='echo  "poweroff: Command disabled - THINK before you type.
  Use /usr/sbin/poweroff if you really want to drive to the DC to restore power."'

2
shutdown -rDevre dışı bırakırken bu nasıl devam eder shutdown -P -H?
MSalters

3

Yanlışlıkla çalıştırılması imkansız olan bir şeyle kapatma işlemini yeniden adlandırın.

Sonra takma ad shutdownolmak(whatever) -r


1
Yürütülebilir dosyayı nasıl yeniden adlandıracağınızı açıklayabilir misiniz? Gelecekte paket güncellemelerini bozabilir mi?
AL,

2
@ AL Gelecekte paket güncellemelerini bozabilir mi? Evet olabilir. Ayrıca önceden kurulu olanları da kırabilir. Genel olarak, işletim sistemi kurulumunun bölümleriyle uğraşmak çok kötü bir fikirdir.
Andrew Henle

1
Anlaşmak. Bu takma ad shutdowniçin yeterli /sbin/shutdown -r. Yeniden adlandırma gerekli değildir; takma ad genişletme mutlak bir yola atıfta bulunduğundan, özyinelemeli takma ad genişletme işlemine tabi değildir.
MSalters

Bir uyarı - 'hiçbir şeyin imkansız olmadığını'
düşünürdüm
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.