Neden /etc/cron.hourly dosyasına bir komut dosyası koymak çalışmıyor?


16

Yürütülebilir bir komut dosyası koydum /etc/cron.hourly, ancak bu komut dosyası her saat çalışmadı aslında hiç çalışmaz.

İşte yaptığım komut (Hour-sound):

#! / Bin / bash
mplayer ~ / Müzik / sfx_msg-highlight.wv &> / dev / null &
spd-say -r -50 -p 50 -t male3 "Şuanki Zaman: $ (tarih +"% l% p ")"
bildir-gönder "Bu:" "$ (tarih +"% l% p ") şimdi." -i ~ / Resimler / "ilk tee.png" -t 5000

Benim crontab:

DISPLAY=":0.0"
XAUTHORITY="/home/naruto/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /home/naruto/Hour-sound.sh

mplayerVe spd-saykomutları doğru şekilde çalışırken notify-send, değil. Ayrıca bir dosyaya yeniden yönlendirme hatası denedim:

0 * * * * /home/naruto/Hour-sound.sh 2>/tmp/error

Ama bu hiçbir çıktı göstermedi. Neyi yanlış yapıyorum?


sadece emin olun, senaryoyu çalıştırılabilir hale getirdin mi? sahip olunan kök? komut dosyasını terminalden çalıştırdığınızda veya basit bir komut dosyası koyduğunuzda ne olur? mu /etc/crontabvar run-partsSaatlik çalıştırmak için çizgi crondizinden işleri?
heemayl

Yürütülebilir: Evet, komut dosyasını çalıştırmak /etc/cron.hourly dizininden yanlış bir şey yapmaz, bunu nasıl kontrol edeceğinizi bilmiyor musunuz? @heemayl
Kara Blok

1
Does /etc/crontabdosya hattı var 17 * * * * root cd / && run-parts --report /etc/cron.hourly?
heemayl


1
Lütfen metnin ekran görüntülerini göndermeyin . Özellikle bu metin şeffaf bir terminal penceresinde görüntülendiğinde ve dikkat dağıtıcı renkler içerdiğinde.
terdon

Yanıtlar:


25

Muhtemelen sorunuzun yorumlarında gördüğünüz gibi, /etc/cron.hourly(ve diğer benzer dizinlerdeki) cronjobs tarafından yürütülür run-parts. run-partsdosya adları hakkında biraz seçici. Varsayılan olarak, dosya adları dışında herhangi bir şey içeren dosyaları çalıştırmaz (ASCII'den gelenlerin tümü)

  • büyük harfler
  • Küçük harfler
  • basamak
  • alt çizgi
  • tire ("eksi işaretleri")

Eğer betiğinizin dosya adı örneğin "myscript.sh" ise, yok sayılır, çünkü run-partsnoktayı beğenmez.


1- İşte dosyalarım: mediafire.com/view/rg8r85xb7qw26zs/cron.hourly_017.png 2- /etc/cron.hourly içinde herhangi bir komut dosyası denediniz mi?
Siyah Blok

2
Sadece / tmp içindeki bir dosyaya "Merhaba" yazan bir litte komut dosyasını test ettim ve sorunsuz çalıştı. Her halükarda, komut dosyalarının /etc/cron.hourlymutlaka "saatte" yürütülmediğinin farkında mısınız? Eğer cronjob'nız /etc/crontabdakika konumunda 17 ise, komut dosyaları 00:17, 01:17 ve benzeri yerlerde yürütülür. Ve yine de, komut dosyasının izinleri kullanıcı kökünün bunları yürütmesine izin veriyorsa?
Henning Kockerbeck

Yah ama o senaryom asla hiçbir zaman çalışmaz. ve izin hakkında buraya bakın: mediafire.com/view/psnb4bflawdlyly/…
Black Block

Belki de bu aslında bir izin problemidir. Daha genel olan komut dosyalarının /etc/cron.d/"grup" veya "diğerleri" için yazma veya yürütme izinlerine sahip olmaması gerektiğini biliyorum . "sahip" yürütme iznine ihtiyaç duyar, "grup" ve "diğerleri" yalnızca okuma iznine sahip olmalıdır. Belki de bu geçerli /etc/cron.hourlydeğil, ama bunu test etmedim.
Henning Kockerbeck

Tamam sonra benim kök medya grubu salt okunur ve diğerleri yapar grup yapar mediafire.com/view/s2lq63u7z54ohbo/… benim dosya izni değiştirdi , bu yüzden bu herhangi bir sorun olacak?
Black Block

5

Bir sorun, cron'dan bir grafik uygulaması ( notify-send) çalıştırmaya çalışmanızdır . Bu biraz ince ayar gerektiriyor. Çalışan X oturumunuza bağlanabilmesi için crontab'da XAUTHORITYve DISPLAYdeğişkenleri ayarlamanız ve XDG_RUNTIME_DIRpulseaudio oturumunuza bağlanabilmesi için ayarlamanız gerekir . Ne yazık ki, bunların crontab içinde ayarlanması gerekiyor, bu yüzden kullanamazsınız /etc/cron.hourly. Bunun yerine, crontab -eşu satırları çalıştırın ve ekleyin:

DISPLAY=":0.0"
XAUTHORITY="/home/YOURUSERNAME/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /path/to/script.sh 

Değerini terminalden XDG_RUNTIME_DIRdöndürdüğünüzde değiştirin echo. Sistemimde bu:

$ echo $XDG_RUNTIME_DIR
/run/user/1001

Muhtemelen sizinkiyle aynı olacak, ama önce kontrol edin. Şimdi, komut dosyanız her saat çalışacak ve beklendiği gibi çalışacaktır.


Kastettiğiniz bu mu? Mediafire.com/view/ucjpvu8b41n3hue/… . bu benim için işe yaramadı.
Black Block

Eğer sorun bildir-gönder ise, neden diğer komut (mplayer gibi) de çalışmadı düşünüyorum?
Black Block

@BlackBlock birden fazla sorun var. i) notify-sendihtiyacı vardır XAUTHORITYve DISPLAYdeğişkenler ayarlanması, ve ii) mplayerihtiyaç XDG_RUNTIME_DIRolması grubu. Önerimi denedin mi? Bu her iki sorunu da düzeltmelidir. Muhtemelen run-partsdiğer cevapta açıklandığı gibi adlandırma sorunlarınız da vardı .
terdon

O zaman bu neden benim için işe yaramadı? kızgın olacağım! cevabınıza 1. yorumda resmimi görün
Black Block

@BlackBlock hayır! Düzenliyorsunuz /etc/crontab, yapma. Bunun kök olarak değil, kullanıcı olarak çalıştırılmasını istiyorsunuz ve bu dosya yine de farklı bir biçime sahip. Sadece cevabımda söylediklerimi yap crontab -e, çizgileri çalıştır ve buraya ekle.
terdon

3

Klasöründe biten bir komut dosyası .shyürütülmez /etc/cron.hourly:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=308911
Bir süre , run-pars (/etc/cron.daily gibi) tarafından işlenen bir dizindeki bağlantılar veya ikili dosyalar çalışmaz onların adı.

komut dosyasını yeniden adlandır

mv /etc/cron.hourly/Hour-sound.sh /etc/cron.hourly/Hour-sound

veya betik çağrısını

/etc/crontab

bu da .shsonlanmaya izin verir


1

Uzantılı komut dosyası (abc.sh) kullanmayın ve ihtiyaç duyduğunuz yeri eklemeyin. (Cron.hours).

kod dosyalarınızı abc dosyasına ekleyin ve kaydedin. (ihtiyaçlarınız için) (bu bash komutu olmalıdır)

kullanım

sudo chmod +x abc

çalıştırılabilir dosya yapma komutu.

edit etc/cronrtab file

önceden tanımlanmış birkaç satır vardır. dakikalardan saat satırına kadar düzenleyin ve kaydedin.

o zaman düzgün çalışır.

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.