我如何確定是否有任何未完成的 Yum 交易需要完成?
當有未完成的 Yum 事務未完成時,執行命令時 Yum 會輸出如下內容
yum update
:There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them.
我如何確定是否有任何未完成的交易而沒有任何副作用?(例如,解析 的輸出
yum update
會導致很多副作用,例如更新儲存庫元數據。)
man 8 yum-complete-transaction
建議人們可以簡單地檢查是否存在匹配的文件/var/lib/yum/{transaction-all,transaction-done}*
(強調我的):yum-complete-transaction 是一個程序,它在系統上發現不完整或中止的 yum 事務並嘗試完成它們。 它查看 transaction-all 和 transaction-done 文件,如果 yum 事務在執行過程中中止,這些文件通常可以在 /var/lib/yum 中找到**。
如果它發現多個未完成的事務,它將嘗試首先完成最近的事務。您可以多次執行它來清理所有未完成的事務。
然而,這似乎並不完全準確。例如,我有一個系統,其中存在此類文件,但
yum-complete-transaction
報告沒有要完成的事務:[myhost ~]% ls /var/lib/yum/{transaction-all,transaction-done}* /var/lib/yum/transaction-all.2016-11-23.07:15.21.disabled /var/lib/yum/transaction-done.2016-11-23.07:15.21.disabled [myhost ~]% sudo yum-complete-transaction Loaded plugins: product-id, refresh-packagekit, rhnplugin No unfinished transactions left.
並嘗試清理未完成的事務文件
--cleanup-only
無法刪除這些文件:[myhost ~]% sudo yum-complete-transaction --cleanup-only Loaded plugins: product-id, refresh-packagekit, rhnplugin No unfinished transactions left. [myhost ~]% ls /var/lib/yum/{transaction-all,transaction-done}* /var/lib/yum/transaction-all.2016-11-23.07:15.21.disabled /var/lib/yum/transaction-done.2016-11-23.07:15.21.disabled
這是一個輸出未完成交易數量的解決方案:
find /var/lib/yum -maxdepth 1 -type f -name 'transaction-all*' -not -name '*disabled' -printf . | wc -c
根據
yum-complete-transactions
from的原始碼yum-utils
,所有/var/lib/yum/transaction-all*
文件都算作未完成的事務…def find_unfinished_transactions(yumlibpath='/var/lib/yum'): """returns a list of the timestamps from the filenames of the unfinished transactions remaining in the yumlibpath specified. """ timestamps = [] tsallg = '%s/%s' % (yumlibpath, 'transaction-all*') #tsdoneg = '%s/%s' % (yumlibpath, 'transaction-done*') # not used remove ? tsalls = glob.glob(tsallg) #tsdones = glob.glob(tsdoneg) # not used remove ? for fn in tsalls: trans = os.path.basename(fn) timestamp = trans.replace('transaction-all.','') timestamps.append(timestamp) timestamps.sort() return timestamps
…除了那些以
disabled
:times = [] for thistime in find_unfinished_transactions(self.conf.persistdir): if thistime.endswith('disabled'): continue # XXX maybe a check here for transactions that are just too old to try and complete? times.append(thistime) if not times: print "No unfinished transactions left." sys.exit()
不幸的是,後面的程式碼在
main()
函式內部,yum-complete-transaction.py
不能獨立呼叫。如果此程式碼更加模組化,則可以編寫一個 Python 腳本,該腳本比上面給出的 shell 管道更準確地檢查未完成的事務。