我想實作一個始終在后臺運行的 shell 腳本。該腳本將添加到啟動應用程式中以供運行。在嘗試確保一次只運行一個實體時,我遇到了以下代碼:
#!/bin/bash
another_instance()
{
echo “There is another instance running, exiting”
exit 1
}
( flock -n 100 || another_instance DEST=/home/backup/`date %s` mkdir -p “$DEST” rsync -avz root@myhost:/home/web “$DEST/.” ) 100>/var/lock/dobackup.lock
在這里,有解釋:
在這個例子中,我們在重定向到鎖定檔案時使用了檔案描述符 100。此外,如果 flock 失敗,我們呼叫 another_instance,通知有另一個實體然后退出。
它有效,但我不明白檔案描述符 100 部分。我嘗試在網上查找,但我的困惑盛行。有人可以解釋flock -n 100和100>/var/lock/dobackup.lock嗎?
據我了解, flock -n 在給定的 /var/lock.. 位置創建/檢查鎖,但 100 的意義是什么?
謝謝你。
uj5u.com熱心網友回復:
為什么不選擇撰寫 systemd 服務有什么特別的原因嗎?
您沒有提到您使用的作業系統 - 這可能是原因。否則我會選擇 systemd。
您可以輕松跟蹤行程的 PID,確保行程始終以系統啟動等。一些不錯的文章開頭
uj5u.com熱心網友回復:
flock -n 在給定的 /var/lock.. 位置創建/檢查鎖
不,flock 適用于檔案描述符。
/var/lock是系統管理員鎖定全域實用程式的典型位置。像例如用于包管理器(pacman,apt-get等)。您可以在任何地方使用(好吧,幾乎)任何帶有flock.
一般而言,flock是與檔案描述符參考的檔案相關聯的屬性。該數字并不重要,它必須是任何打開以寫入檔案描述符。100
100>/var/lock/dobackup.lock將檔案描述符重定向100到 file /var/lock/dobackup.lock。flock -n 100在檔案描述符上應用 flock 100。
有關檔案描述符,請參閱 Wikipedia,請參閱man 2 flock和man 2 fcntl。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/365926.html
上一篇:使用Rcpp組件Linux系統加載R包時找不到共享的.so檔案
下一篇:關于libcurl的問題
