Dalam hal tertentu saya pikir Anda bisa menggunakan shutdown. perintah dengan sudo dan argumen yang sesuai untuk menjadwalkan tidur pada waktu tertentu.
Apa tugas yang perlu Anda lakukan, dan mengapa tepatnya 4 jam tidur?
Thorbjørn Ravn Andersen
Jawaban:
46
Gunakan sudountuk memulai shell root tempat Anda menjalankan perintah:
sudo bash -c 'sleep 4h; command'
Setiap perintah yang berjalan di shell root dijalankan dengan izin root, yang untuk sleeptidak ada salahnya. Jika Anda perlu menjalankan perintah dengan izin pengguna di dalamnya, gunakan sudo -u USERNAME COMMAND, misalnya:
$ sudo bash -c 'sleep 4h; sudo -u dessert whoami; whoami'
dessert # whoami run as user dessert
root # whoami run as root
Ya, atadalah alat yang tepat untuk pekerjaan ini, karena itu juga menangani pengalihan I / O, tidak memblokir jendela shell, dan bekerja bahkan ketika pengguna telah logout atau mesin telah reboot sejak itu.
Simon Richter
4
@SimonRichter: sudo bash -c 'sleep 4h && command' &untuk menempatkan sudo di latar belakang adalah cara yang lebih mudah untuk tidak memblokir jendela / tab shell. Jika Anda ingin output muncul secara tidak sinkron sebagai pengingat bahwa itu terjadi, itu lebih mudah. Ini tidak berfungsi di seluruh reboot, tetapi tergantung pada nohuppengaturan Anda mungkin tetap berjalan setelah keluar / keluar dari shell.
Peter Cordes
4
Catatan yang atmenjalankan perintah segera setelah itu dapat ketika sistem ditangguhkan pada waktu yang ditentukan, lihat di sini di U&L - tergantung pada perintah untuk menjalankan ini mungkin bukan yang Anda inginkan.
hidangan penutup
2
Sekedar saran, Anda juga dapat menggunakan systemctl untuk memeriksa status layanan alih-alih secara langsung memanggil skrip init.d tersebut. Walaupun keduanya tampaknya memiliki hasil yang sama, saya pikir cara modern untuk berinteraksi dengan layanan systemd harus lebih disukai:systemctl status atd
Byte Commander
15
Salah satu caranya adalah berjalan melalui shellscript dengan sudoizin (dan berikan kata sandi, ketika Anda memulai shellscript), jika shellscript ada di direktori saat ini,
sudo ./delayer 4h
di mana delayerbisa menjadi shellscript dengan kontennya
#!/bin/bash
sleep "$1"
command
Jadikan itu dapat dieksekusi dengan
chmod +x delayer
dan salin atau pindahkan ke direktori PATHjika Anda mau.
Jika Anda menginginkan shellscript yang lebih fleksibel, di mana Anda dapat memilih perintah [baris] untuk ditunda dengan memasukkan parameter, Anda dapat mencoba
Nah, jika itu /bin/shsintaks akan baik-baik saja. Tetapi jika Anda berniat menggunakan fitur spesifik bash, maka shebang diperlukan. Saya dan steeldriver berdiskusi tentang hal itu di suatu tempat. Aaand Videonauth menghapus komentarnya sebelum saya bisa merespons dengan benar. Oh well
Sergiy Kolodyazhnyy
@SergiyKolodyazhnyy, Anda benar. Jadi dalam hal ini shebang ada untuk membuat shellscript kuat dalam hal fitur tambahan di mana sintaksis mungkin berbeda.
sudodus
@SergiyKolodyazhnyy Yah itu hanya saran jadi saya pikir meninggalkan komentar di sana tidak perlu dan hanya akan menambah kekacauan. Jangan ragu untuk
menghubungi
2
Cara lain adalah dengan memulai sesi interaktif sudo dengan sudo -s(tidak mengubah direktori) atau sudo -i(mengubah direktori saat ini untuk me-root direktori home) dan kemudian masukkan perintah Anda (tanpa sudo)
shutdown
. perintah dengan sudo dan argumen yang sesuai untuk menjadwalkan tidur pada waktu tertentu.Jawaban:
Gunakan
sudo
untuk memulai shell root tempat Anda menjalankan perintah:Setiap perintah yang berjalan di shell root dijalankan dengan izin root, yang untuk
sleep
tidak ada salahnya. Jika Anda perlu menjalankan perintah dengan izin pengguna di dalamnya, gunakansudo -u USERNAME COMMAND
, misalnya:Pendekatan lain akan digunakan
sudo visudo
untuk memungkinkan eksekusi perintah tanpa akses root, lihat: Bagaimana mengizinkan eksekusi tanpa meminta kata sandi menggunakan sudo?Perhatikan bahwa tergantung pada perintah ini dapat membuat cacat keamanan.
sumber
Dengan asumsi Anda hanya ingin menjalankan proses satu kali (tidak, misalnya setiap 4 jam) maka Anda dapat menggunakannya
atd
/etc/init.d/atd status
atau masih lebih baiksystemctl status atd
)Di terminal sebagai root jalankan perintah Anda sebagai berikut:
Jika Anda ingin menjalankannya setiap 4 jam Anda juga bisa menggunakan cron (sebagai root) dengan konfigurasi berikut di crontab Anda
sumber
at
adalah alat yang tepat untuk pekerjaan ini, karena itu juga menangani pengalihan I / O, tidak memblokir jendela shell, dan bekerja bahkan ketika pengguna telah logout atau mesin telah reboot sejak itu.sudo bash -c 'sleep 4h && command' &
untuk menempatkan sudo di latar belakang adalah cara yang lebih mudah untuk tidak memblokir jendela / tab shell. Jika Anda ingin output muncul secara tidak sinkron sebagai pengingat bahwa itu terjadi, itu lebih mudah. Ini tidak berfungsi di seluruh reboot, tetapi tergantung padanohup
pengaturan Anda mungkin tetap berjalan setelah keluar / keluar dari shell.at
menjalankan perintah segera setelah itu dapat ketika sistem ditangguhkan pada waktu yang ditentukan, lihat di sini di U&L - tergantung pada perintah untuk menjalankan ini mungkin bukan yang Anda inginkan.systemctl status atd
Salah satu caranya adalah berjalan melalui shellscript dengan
sudo
izin (dan berikan kata sandi, ketika Anda memulai shellscript), jika shellscript ada di direktori saat ini,di mana
delayer
bisa menjadi shellscript dengan kontennyaJadikan itu dapat dieksekusi dengan
dan salin atau pindahkan ke direktori
PATH
jika Anda mau.Jika Anda menginginkan shellscript yang lebih fleksibel, di mana Anda dapat memilih perintah [baris] untuk ditunda dengan memasukkan parameter, Anda dapat mencoba
Contoh demo (penundaan pendek, 5 detik, untuk tujuan demo),
sumber
/bin/sh
sintaks akan baik-baik saja. Tetapi jika Anda berniat menggunakan fitur spesifik bash, maka shebang diperlukan. Saya dan steeldriver berdiskusi tentang hal itu di suatu tempat. Aaand Videonauth menghapus komentarnya sebelum saya bisa merespons dengan benar. Oh wellCara lain adalah dengan memulai sesi interaktif sudo dengan
sudo -s
(tidak mengubah direktori) atausudo -i
(mengubah direktori saat ini untuk me-root direktori home) dan kemudian masukkan perintah Anda (tanpa sudo)sumber