완료해야 할 미결 Yum 거래가 있는지 어떻게 확인하나요?

완료해야 할 미결 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 트랜잭션을 찾아 완료를 시도하는 프로그램입니다. 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 스크립트를 작성할 수 있습니다.

관련 정보