Saya harus menyalin file di mesin. Dan datanya sangat besar. Sekarang server perlu melayani secara normal, dan biasanya ada rentang jam sibuk tertentu pada mereka. Jadi, apakah ada cara untuk menjalankan perintah sedemikian rupa sehingga jika server mencapai jam sibuk, ia berhenti proses, dan ketika keluar dari kisaran itu, ia melanjutkannya?
Hasil yang Dimaksudkan
cp src dst
if time between 9:00-14:00 pause process
After 14:00 resume cp command.
process
process-management
Sollosa
sumber
sumber
cp -al
untuk membuat kebun hardlink? Atau gunakan sistem file yang mendukung reflink level blok dengan copy-on-write, gunakancp -a --reflink=auto
? BTRFS dan ZFS mendukungnya untuk salinan dalam perangkat fisik yang sama.src
diubah antara pukul 9: 00-14: 00? Jika demikian, cukup menjeda dan melanjutkancp
proses dapat mengakibatkan file rusak. Mungkin lebih baik dijalankanrsync
dalam kombinasi dengantimeout
perintah.Jawaban:
Ya, Anda Perlu
Proses kemudian akan Muncul dengan Status "T" (PS). Untuk melanjutkan, lakukan a
Semoga berhasil!
sumber
Anda dapat menghentikan sementara proses dengan mengirimkannya sinyal SIGSTOP dan kemudian melanjutkannya dengan mengirimkannya SIGCONT.
Dengan asumsi beban kerja Anda adalah proses tunggal (tidak garpu pembantu berjalan di latar belakang), Anda dapat menggunakan sesuatu seperti ini:
Kemudian ketika waktu sibuk dimulai, kirimkan sebuah SIGSTOP:
Kemudian, ketika server menganggur lagi, lanjutkan.
Anda perlu menjadwalkan ini untuk waktu tertentu ketika Anda ingin dieksekusi, Anda dapat menggunakan alat seperti timer cron atau systemd (atau berbagai alat serupa lainnya) untuk mendapatkan jadwal ini. Alih-alih menjadwalkan berdasarkan interval waktu, Anda dapat memilih untuk memantau server (mungkin melihat rata-rata beban, penggunaan cpu atau aktivitas dari log server) untuk membuat keputusan kapan harus menjeda / melanjutkan salinan.
Anda juga perlu mengelola file PID (jika Anda menggunakannya), pastikan salinan Anda benar-benar masih berjalan sebelum menjeda, mungkin Anda ingin membersihkan dengan menghapus pidfile setelah salinan selesai, dll.
Dengan kata lain, Anda perlu lebih banyak di sekitar ini untuk membuat yang dapat diandalkan, tetapi ide dasar untuk menggunakan sinyal SIGSTOP dan SIGCONT ini untuk menjeda / melanjutkan pelaksanaan suatu proses tampaknya menjadi yang Anda cari.
sumber
Alih-alih menunda proses, Anda juga bisa memberikan prioritas yang lebih rendah:
akan memberikan prioritas terendah (tingkat kebaikan tertinggi), sehingga proses akan menghasilkan CPU untuk proses lain yang paling membutuhkannya.
Di Linux, hal yang sama dapat dilakukan dengan I / O dengan
ionice
:Akan menempatkan proses di kelas "idle", sehingga hanya akan mendapatkan waktu disk ketika tidak ada program lain yang meminta disk I / O untuk masa tenggang yang ditentukan .
sumber
Gunakan rsync, lupakan cp, untuk skenario ini. ada params untuk membatasi bandwidth, atau dapat dibunuh / dihentikan dan mulai nanti, dengan cara itu akan berlanjut, di mana ia meninggalkan google rsync example / s
sumber
Jika Anda akan melakukannya dengan mengganggu proses yang sedang berjalan, saya sarankan bermain dengan program Screen. Saya belum pernah menggunakan Linux untuk sementara waktu, tetapi IIRC hanya menjeda perintah dan melanjutkannya lagi membuat Anda sangat rentan, jika Anda tidak sengaja keluar, Anda tidak akan dapat melanjutkan kembali sesi Anda.
Dengan layar saya percaya Anda dapat mengganggu sesi kemudian lepaskan dan keluar. Nanti Anda dapat kembali dan menyambung kembali ke sesi itu. Anda harus bermain dengannya sedikit tetapi itu membuat sesi jauh lebih kuat.
Anda juga dapat logout dan pulang, kemudian login dari jarak jauh, pasang kembali ke sistem y Anda mulai di kantor dan melanjutkan untuk malam itu, kemudian mengambilnya lagi pada hari berikutnya di tempat kerja.
sumber
Jika shell Anda mendukungnya (hampir semuanya), Anda dapat menekan ^ Z (Ctrl + Z) untuk dengan mudah mengirim
SIGTSTP
sinyal ke tugas latar depan, kemudian lanjutkan denganfg
(di latar depan) ataubg
(di latar belakang).Jika Anda melakukan ini pada banyak tugas dan ingin kembali lagi nanti, Anda dapat menggunakan
jobs
perintah, lalu kembali denganfg/bg %#
, di mana # adalah angka yang diberikan dalam tanda kurung pada pekerjaan.Perlu diingat bahwa
SIGTSTP
ini sedikit berbeda dariSIGSTOP
(yang digunakan pada semua jawaban lain), yang paling penting karena fakta bahwa itu dapat diabaikan (tapi saya tidak melihat program mengabaikannya selainsl
). Rincian lebih lanjut dapat ditemukan pada jawaban ini di StackOverflow .sumber