如何在啟動時自動啟動 s3ql 腳本?
我一直在 Ubuntu 10.04 上試驗s3ql,用它來掛載 Amazon S3 儲存桶。但是,我真的很想自動掛載它們。有誰知道這是怎麼做到的嗎?
解決方案:
感謝 s3ql 的Nikratio的幫助,我終於能夠在系統啟動時自動安裝 S3 儲存桶。您肯定會想看一下手冊,但這裡有一些基本的操作方法!
第一步是創建一個 authinfo 文件。該文件應放置在將要使用它的使用者主目錄中的 .s3ql 目錄中。authinfo 文件包含允許 s3ql 在不提示的情況下掛載儲存桶的登錄資訊。下面是您的 authinfo 文件應該是什麼樣子的範例。第一行包含您的 Amazon 安全憑證。第二個包含儲存桶的位置和密碼。如果需要,您可以向此文件添加多個儲存桶行,但我在此範例中僅使用一個。此時,桶密碼可以是任何東西。
backend s3 machine any login ASDFGHJKL password ZXCVBNM storage-url s3://mybucket password mypassword
儲存桶名稱必須是唯一的。沒有兩個使用者可以擁有相同的儲存桶名稱,因此最好登錄 Amazon Web Services 並嘗試不同的名稱,直到找到可用的名稱。一旦你找到了,你需要刪除它,因為 s3ql 在創建你的 s3ql 文件系統時會重新創建它。如果儲存桶已存在,您將收到錯誤消息。
要創建文件系統,請使用以下命令:
mkfs.s3ql s3://mybucket
它將提示您輸入加密密碼。這應該與 authinfo 文件中的儲存桶密碼相同。
現在您的文件系統已創建,您可以使用以下命令掛載它:
mount.s3ql s3://mybucket /mnt/s3/bucket
當然,您的儲存桶名稱和掛載點會有所不同。
現在,如果我們想在啟動時自動掛載這個儲存桶,我們需要在 /etc/init.d 中添加一個 upstart 腳本。幸運的是,s3ql 附帶了一個 s3ql.conf。
我在 mount.s3ql 命令中添加了“–allow-other”,以允許 root 以外的使用者訪問掛載的儲存桶。
# # This file can be placed in /etc/init. It defines an upstart job that # takes care of mounting and unmounting an S3QL file system. # description "S3QL Backup File System" author "Nikolaus Rath <Nikolaus@rath.org>" start on (filesystem and net-device-up IFACE=eth0) stop on runlevel [016] env BUCKET="s3://mybucket" env MOUNTPOINT="/mnt/s3/bucket" expect stop script # Redirect stdout and stderr into the system log DIR=$(mktemp -d) mkfifo "$DIR/LOG_FIFO" logger -t s3ql -p local0.info < "$DIR/LOG_FIFO" & exec > "$DIR/LOG_FIFO" exec 2>&1 rm -rf "$DIR" # Check and mount file system fsck.s3ql --batch "$BUCKET" exec mount.s3ql --upstart --allow-other "$BUCKET" "$MOUNTPOINT" end script pre-stop script umount.s3ql "$MOUNTPOINT" end script
添加此腳本後,理論上您應該能夠重新啟動並自動掛載您的儲存桶,但這是我遇到的麻煩。我的沒有安裝。
我的問題是由於 upstart 以 root 身份執行腳本,但我以另一個使用者身份創建了文件系統。一旦我從我登錄到 /root 的使用者的主目錄複製了 .s3ql 目錄,問題就解決了。
我希望這對其他人有幫助。雖然我已經很久沒有使用我安裝的 S3 儲存桶了,但我對我的初始測試的進展印象深刻。
此外,這個答案是在找到解決方案大約一周後寫的。我想我已經涵蓋了所有內容,但是如果您發現我錯過了一步,請告訴我,我會添加它。您還需要閱讀手冊,如果您打算使用 s3ql,它真的值得一讀。
使用 S3QL 中包含的 upstart 腳本,它
s3ql.conf
在contrib/
目錄中被呼叫。將其複製到/etc/init
並將“開始”行更改為start on (filesystem and net-device-up IFACE=eth0)
(更換
eth0
為您的網際網路連接的網路設備)。
我想你需要
sudo update-rc.d name_of_the_script 預設值
此外,您可能需要“chmod +x”腳本