İlk olarak, komut dosyası bir sistem arka plan programı tarafından çalıştırılıyorsa ve bu arka plan programı kök ayrıcalıklarıyla çalışıyorsa, kullanmanıza gerek yoktur sudo
. Buna aşağıdakileri içeren init
(ve systemd
) dahildir rc.local
. O süreç ise değil root ayrıcalığı ile çalışan, daha sonra sudo
sürece çalışmaz /etc/sudoers
böyle (ve şifre olmadan) izin verecek şekilde yapılandırıldı. Raspbian kullanıcıları, pi
kullanıcının varsayılan olarak herhangi bir şey yapmasına izin verildiğinden (ve eğer bakarsanız /etc/sudoers
bunun nasıl yapıldığını göreceksiniz) bununla karıştırılabilir.
Ardından, herhangi bir bash
komut dosyasından veya bir bash komut dosyası içindeki herhangi bir komut kümesinden, bunları aşağıdaki gibi bir alt kabukta yürüterek yakalayabilirsiniz : 1
(
/bin/foo on 3
sudo bar a
) &> /var/log/myTestLog.txt
()
Belirten bir altkabuk . Bunun içindeki her şeyden elde edilen tüm çıktılar bir /var/log/myTestLog.txt
dosyaya yönlendiriliyor . Birkaç not:
&>
Bir olan bashism nedenle komut dosyası bir eliyle yürütülür eğer shebang ilk satırda, olması gerektiği #!/bin/bash
değil sadece, /bin/sh
. "Bashizmler" sadece bash
kabukta çalışır.
Bu, /etc/rc.local
varsayılan olarak kullananları içerir /bin/sh
(yani, evet, bunu güvenli bir şekilde değiştirebilirsiniz /bin/bash
).
/var/log
yazmak için kök ayrıcalıkları gerekir. İşlem böyle değilse, yapabileceğini bildiğiniz bir dizin kullanın veya oluşturun. Şüphe duyduğunuzda, sistemi kapatmaya veya yeniden başlatmaya gerek kalmadan bunu test edebiliyorsanız /tmp
, dünya tarafından yazılabilir (yani, herkes tarafından) kullanın. Ancak /tmp
botlar arasında devam etmez. Aynı zamanda küçük, RAM tabanlı bir bölümdür, bu yüzden ona veri konserleri yazmayın. SD kartınız değil [aslında Raspbian'ın şu anki sürümlerinde, ama pratikte buna güvenmeyin] .
&>
içindeki herhangi bir şeyin üzerine yazacak myTestLog.txt
. Bunun yerine, hata ayıklama amaçları için iyi bir fikir olabilecek mevcut bir günlüğe eklemek istiyorsanız kullanın &>>
. Daha sonra bu alt kabuğun başına şu şekilde bir komut ekleyebilirsiniz:
echo Starting $(date)
Bilgileri her çalışmadan ayırmak için. Bunun ne yaptığından emin değilseniz, komut satırında deneyin.
Bu son nokta, hiçbir şey vermeyen komutlar için yapabileceğiniz bir şeyin iyi bir gösterimidir - ancak çoğu, örneğin -v
"ayrıntılı" için eklerseniz bunu yapar . Bazı komutlara dikkat edin, -v
"sürüm bilgilerini yazdır" anlamına gelir. Bunun nasıl çalışacağından ve nasıl çalışacağından emin olmak için komutun man sayfasına bir göz atın (bazı komutlar ayrıca farklı bir anahtar kullanır -v
).
Kural olarak, komutlar tamamlandığında 0 değerini de döndürür. Buna bazen "çıkış durumu" denir ve normalde görmezsiniz, ancak kabuk size gösterecektir echo $?
. Deneyin
ls /
echo $?
ls /nonexistantdir
echo $?
0 ve 2 alırsınız. Daha sonra man sayfasında ls
"Çıkış durumu" için arama yaparsanız, oldukça spesifik olmayan şifreli görürsünüz:
2 if serious trouble (e.g., cannot access command-line argument).
Hangisi daha iyi olabilir veya olmayabilir, ama işte gidiyorsunuz.
En azından bu, komutun bir nedenden dolayı başarısız olduğunu gösterir. Çıkış durumu ayrıca aşağıdaki gibi şeyler yapmanızı sağlar:
/bin/foo && sudo bar
&&
"İlk komut başarılı olursa" bu durumda araçlarında, ilk komutu varsayarsak (genellikle yaptıkları neden olan) 0 ile dönmesi kuralı kullanır. Eğer /bin/foo
işe yaramazsa, bulunamaz vb., O sudo bar
zaman asla olmayacaktır.
Günlük iletilerini ve koşullu yürütmeyi ( &&
) bir arada kullanmak , sorunu anlamanıza veya en azından sorunu çözmenize yardımcı olabilecek başkaları için yararlı olabilecek bilgiler edinmenize çok daha yakın olmalıdır. Bu olmadan, diğer herkesin sık sık yapabileceği tahminidir.
1. Komut dosyasının tamamını içeriden aynı çıktı yönlendirmesini kullanarak şunları yapabilirsiniz:
exec &> /var/log/myTestLog.txt
Üstte (veya herhangi bir yerde ve sonraki her şey için geçerli olacaktır).
U&L
. Başlığı yanlış okudum ve "Hata ayıklama için bir sistem komut dosyasının çıktısını günlüğe kaydetme" amacını daha net hale getirir. Ayrıca bufoo
bar
örnekleri okuduğumda beynim donuyor , daha gerçek dünyaya benzeyen bir şeyi tercih ediyorum. Herhangi bir yayını düzenlemek istemiyorum, bu yüzden geliştirilebileceğini düşünüyorsanız bunu size bırakacaktır.