私はLinuxサーバーで作業していますが、これは利用できませんcron
。したがって、この問題を解決するために、次のように特定の時間に実行する必要があるスクリプトを作成しました。
while true
do
...
...
sleep 1d #changes upon requirement of my script
done
私はいつもバックグラウンドでスクリプトを起動しますnohup ./script.sh &
。
私の問題は、サーバーでこれらのスクリプトの6/7が実行されているとします。ほとんどの時間は寝ています。これはsleep
一種のメモリを消費しますか?サーバーのパフォーマンスに影響しますか?この問題を解決する効果的な方法はありますか?
答え1
はい - このスクリプトはメモリを消費しています。実際、メモリを使用して実行される2つのプロセスがあります。
- シェル(例:bash)
sleep
それ自体。
sleep
非常に軽量ですが、シェルは数メガバイトのメモリを消費できます。私のシステムでは、アイドル非対話型bashは約1MiBを消費し、スリープモードは0.7MiBを消費します。 (RSS列を見ると)確認できます。それらの多くは、実際に使用するすべてのプロセス間ps
でtop
共有されるライブラリのようなものです。おおむねそれぞれ1MiB未満になります。
Linuxでは、ここで興味のあるもの/proc/pid/status
(および)を使って/proc/pid/smaps
詳細を得ることができます。Vm*
たとえば、
bash -c 'grep Vm /proc/$$/status'
VmPeak: 13380 kB
VmSize: 13380 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 972 kB
VmRSS: 972 kB
VmData: 220 kB
VmStk: 132 kB
VmExe: 208 kB
VmLib: 2320 kB
VmPTE: 48 kB
VmPMD: 12 kB
VmSwap: 0 kB
合計RSS(使用されているRAMの量)は972kBであり、そのうち220kBは「データ」(一般的に共有されていない)であり、132kBはスタック(また共有されていない)であることがわかります。したがって、各追加のbash実行は非常に小さいです。
いくつかのアドバイス:このようないくつかの回避策を実行する必要がある場合... cronが利用できないのはなぜですか?これは、予期しないエラーが発生する可能性が低い、より簡単できれいなアプローチです(高速です!sleep 1d
夏時間の変更を処理する方法は? )。システム管理者が、承認されていない人がcronジョブをスケジュールすることを心配している場合は、その人が/etc/cron.allow
crontab /etc/cron.deny
(1)にログインしていることを知らせてください。
答え2
sleep
リソースをほとんど消費しないように設計されています。
sleep
ただし、さまざまな理由でプロセスが中断される可能性があることに注意してください。予想より早くコマンドを実行しないようにすることもできます。