pengaturan nirkabel saya gagal beberapa kali sehari, memulai kembali membantu manajer jaringan gnome. Saya ingin mengotomatisasi ini dan meretas skrip perl berikut:
#!/usr/bin/perl
use strict;
use warnings;
my $result = system "ping -c1 -W1 192.168.1.1";
if ($result != 0) {
print "No connectivity. Action required...\n";
my $pid = `pgrep nm-applet`;
if ($pid) {
print "Killing current nm-applet instance $pid\n";
system "kill $pid";
}
print "Starting nm-applet...";
exec "nm-applet" or die "couldn't start nm-applet";
} else {
print "Looks all fine. No action required\n";
}
Tes pertama saya adalah hanya membunuh nm-applet dengan tangan dan menjalankan skrip secara manual. Itu tidak mendeteksi konektivitas dan hanya "morphs" ke nm-applet, seperti yang dimaksudkan.
Sekarang tes yang sama tetapi dijalankan oleh pekerjaan cron berikut:
*/1 * * * * /home/joe/netcheck.pl >> /home/joe/netcheck.log &
Output di netcheck.log hanya "Memulai nm-applet ..." tetapi tidak memulai. Prosesnya langsung mati begitu saja.
Bantuan atau solusi lain yang mungkin dihargai.
linux
cron
perl
networkmanager
zedoo
sumber
sumber
Jawaban:
Seperti semua orang yang menjawab sudah menunjukkan, cron menjalankan perintah di lingkungan yang sangat minim. Saya sarankan Anda mencoba ini secara berurutan:
Dalam entri crontab, jalankan skrip secara eksplisit menggunakan perl.
Tangkap keduanya stdout dan stderr output dari skrip.
Ganti sementara
exec "nm-applet"
denganexec "ls"
atau perintah sederhana lainnya untuk memeriksa bahwa masalahnya ada pada lingkungan yang diharapkan nm-applet, bukan dengan skrip itu sendiri.nm-applet –sm-disable
membantu.strace nm-applet
alih-alih melacak panggilan sistem. Jalankan ini secara normal dan dalam cron untuk mengidentifikasi panggilan dari mana log berbeda. Debug dari titik itu.Setelah mengatakan ini, saya tidak terkejut melihat nm-applet gagal dijalankan dengan benar dari dalam cron. Mungkin perlu akses ke tampilan dan pustaka gnome yang hilang dari dalam lingkungan cron. Suatu pekerjaan mungkin lebih baik, tetapi itu pun tidak ideal. Saya akan merekomendasikan menggunakan wicd alih-alih jika Anda perlu menyambung kembali dari pekerjaan cron.
sumber
Cron berjalan di bawah lingkungan yang sangat minim. Menyediakan jalur lengkap dan eksplisit untuk semua perintah shell (mis.,
/sbin/ping
dari padaping
dan seterusnya - periksa di mana item yang relevan pertama kaliwhereis ping
dan seterusnya), dan kemungkinan akan berjalan dengan baik.sumber
Secara umum, Anda tidak dapat memulai aplikasi GUI dari cron, karena cron tidak memiliki lingkungan, desktop, tampilan, dll.
Coba ini di cron
atau alih-alih mengatur DISPLAY di crontab, coba atur dalam skrip itu sendiri. Saya tidak yakin jalan mana yang akan berhasil.
sumber
Dalam skrip Anda, coba dump sistem PATH sebelum panggilan "exec nm-applet". nm-applet ada di / usr / bin pada sistem saya, dan saya tidak dapat membayangkan PATH default tidak mengandung / usr / bin tetapi hal-hal aneh telah terjadi.
sumber