미해결 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 트랜잭션을 찾아 완료를 시도하는 프로그램입니다. yum 트랜잭션이 실행 중에 중단되면 일반적으로 /var/lib/yum에서 찾을 수 있는 transaction-all* 및 transaction-done* 파일을 확인합니다..
미해결 트랜잭션이 여러 개 발견되면 가장 최근 트랜잭션을 먼저 완료하려고 시도합니다. 여러 번 실행하여 미해결 트랜잭션을 정리할 수 있습니다.
그러나 이는 완전히 정확하지는 않은 것 같습니다. 예를 들어, 이러한 파일이 존재하지만 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
답변1
다음은 미해결 트랜잭션 수를 출력하는 솔루션입니다.
find /var/lib/yum -maxdepth 1 -type f -name 'transaction-all*' -not -name '*disabled' -printf . | wc -c
yum-complete-transactions
의 소스 코드 에 따르면 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 스크립트를 작성할 수 있습니다.