updatedb를 비활성화 할 수 있습니까?


26

updatedb전혀 필요? 나는 결코 사용하지 않으며 locate서버에는 수십만 개의 파일이있는 경향이 있습니다.이 파일은 일반적으로 updatedb를 오랫동안 실행하고 MySQL 및 / 또는 다른 소프트웨어에 필요한 I / O를 소비합니다.

cron에서 제거하고 모든 것이 작동 할 것으로 기대할 수 있습니까? (서버에서 발견되는 일반적인 소프트웨어 : linux, cpanel, mysql, apache, php 등).

답변:


25

예. 크론에서 비활성화하거나 제공하는 패키지를 제거 할 수 있습니다 updatedb. Red Hat 시스템에서는 제거하기 전에 어떤 것이 필요한지 결정하는 단계를 거칩니다.

  1. 먼저 프로그램이 디스크에서 어디에 있는지 확인하십시오.

    $ type updatedb
    updatedb is /usr/bin/updatedb
    
  2. 다음은 어떤 패키지가 제공되는지 확인하십시오 updatedb.

    $ rpm -qf /usr/bin/updatedb
    mlocate-0.26-3.fc19.x86_64
    
  3. 필요한 것이 있는지 확인하십시오 mlocate.

    $ rpm -q --whatrequires mlocate
    no package requires mlocate
    
  4. 필요한 것은 없으므로 패키지를 제거 할 수 있습니다.

    $ yum remove mlocate
    

1
rpm또한 있습니다 --whatrecommends. Fedora는 지난 몇 년 동안 개념으로 생각하기 시작했습니다. (데비안 / 우분투 쪽이 "권장"뿐만 아니라 "필수"를 설치하도록 기본 설정 한 후).
sourcejedi

제거 후 삭제할 수 /var/lib/mlocate있습니까?
Ramratan Gupta

1
@RamratanGupta-예
slm

13

구성 파일 /var/www을 편집하여 파일이 많은 디렉토리의 스캔을 비활성화 할 수 있습니다 ( 예 :) /etc/updatedb.conf. 실제로 비활성화하려면 cronjob을 제거하십시오.


5

패키지 관리자를 사용하여 제거하십시오. 다른 패키지가 사용하는 경우 패키지 종속성에 의존해야하므로 알 수 있습니다.

와 및 서버가 Nginx있으며 없이도 아름답게 작동합니다 .php-fpmmysqlupdatedb


또한 apt aptitude remove에서는 aptitude why, 또는을 사용할 수 있습니다 aptitude search '?installed ?recommends(mlocate)'. 이것들은 모두 요구 사항 외에도 권장 사항 종속성을 보여줍니다. apt는 기본적으로 권장 패키지를 설치하므로 필수 패키지로 간주되지는 않지만 매우 유용한 하위 기능을 제공하기 위해 의존 할 수 있습니다.
sourcejedi

0

나는 이것을 말함으로써 사지에서 멀리 가지 않을 것이지만, 문제를 일으키는 것은 업데이트되지 않았을 것입니다. 아마 당신이 원하지 않는 다른 것, 당신이 당신의 'liking'으로 구성하지 않은 백업 응용 프로그램 또는 프로필 / 시스템 그룹 구조의 일부 보안 문제.

시스템 메모리 할당이 사용자에 대해 작동하는 것처럼 보이는 또 다른 경우는 하나의 '가상 파일 시스템을 알지 못하는'시나리오입니다. 그리고 그것은 문제의 바보입니다. 말하자면 '가상 불법 범죄 폭탄'입니다.

ext 4 시스템에서 fat32로 포맷 된 USB 드라이브에서 자주 발생합니다. 그런 다음 csh 쉘을 man login shell로 잘못 설정 한 zfs 시스템으로 전송합니다. 디스크에 "읽기 파일 전용 USB 파일 시스템"문제의 가상 재귀를 생성하고 드라이브를 fat32에서 vFat로 포맷 / 마운트하여 불량 블록 섹터를 생성하고 디렉토리를 최대로 디렉토리를 추출 (가상 이동)합니다. 무한 루프를 일으키는 상위 디렉토리 레벨! 디렉토리가 실제로 상위 레벨의 계층 구조에 있지 않습니다. csh 원인의 구문이 원인입니다. * 참고 : 드라이브는 zfs c-shell 로그인 시스템을 제외한 모든 시스템에서만 읽습니다.

updatedb를 완전히 비활성화하려면 메모리 할당 및 '롤백 효과'와 관련하여 잘못된 논리를 만들 수 있습니다. 원하지 않는 시점에서 롤백 한 적이 있다면 명령 줄을 2 시간 동안 사용할 때의 의미를 알 수 있습니다. 작업 처리를 메모리에 할당하지 않았기 때문에 스크립팅은 Fubar-ed입니다.

이제 두 개 이상의 물리적 프로세서 (예 : 듀얼 코어 이상)와 ddr3 램이 있으면 괜찮습니다. 무거운 그래픽을 실행하지 않는 한,이 경우 해당 전원로드로 인해 문제가 발생하는 경우 업데이트 된 목록이 목록에서 마지막입니다. 어떤 이유로 시스템에 대한 움직임을 위장하려고하는 경우 updatedb를 비활성화하는 대신 다른 방법으로 시스템을 변경할 수 있으며 실제로 updatedb는 시스템에 가장 적합한 '아무것도하지 않는'행동을 강화합니다.

솔직히 바이너리 파일 / usr / bin / updatedb의 크기와 OS와의 신호 / 시스템 통신 아키텍처를 고려하고 Bash가 10 배 크기 인 쉘 대시 또는 애쉬의 비동기 호출을 고려하면 비동기 호출은 시스템에서 매우 저렴합니다.

작성한 순차 스크립트를 실행하여 쉘에 로그인하고 관리자 인 경우 (예 : sudo) 다음 명령을 실행하십시오.

~$ sudo bash
:~# ./script.sh

그런 다음 스크립트 내에서 로컬 변수를 작성하려고합니다 (updatedb는 시스템 특권, AKA 루트 / 스도 / 휠 필요).

#! /bin/sh
# Create local variables
UPD="updatedb"

echo "Beginning Execution of sequence "

이 경우 시퀀스는 사용자가 작성하고 기본 스크립트에서 변수로 실행중인 다른 쉘 스크립트에서 STDOUT / STDIN을 사용하거나 cdrom에서 업로드 / 다운로드 / 포트하는 개인 또는 비즈니스 관리자 패키지가 있다고 가정합니다. USB 또는 그 크기가 매우 크며 개인용 설치 스크립트가있는 경우 계속 업데이트하십시오. 터미널 셸이 열리면 기본 응용 프로그램 인스턴스입니다. 다른 응용 프로그램은 비동기 적으로 / 실행될 수 있지만 업데이트 된 b는 전체 시스템 / 컴퓨팅 수요 측면에서 가장 비용이 적게 듭니다. 여러 번, 특히 lxdm Desk Enviro와 Lxterm에서 (단, 매우 빠름) 단독으로는 아닙니다. 내 스크립트에 updatedb를 추가하지 않고 시스템에서 파일이 존재하지 않거나 나사로 인해 발생한 오류가 발생했습니다. 그리고 나는 무엇을 좋아한다!

쉘은 관리하는 시스템보다 빠릅니다. 보증합니다!

이 경우 updatedb 변수를 호출하여 그림과 같이 이전 시퀀스를 메모리에 고정합니다.

echo "Updating local database "

$UPD

echo "Exiting script two "

exit

무슨 말인지 알 겠어? Andrew Tanenbaum 스타일보다 실행 속도 테스트를 실행하기 때문에이 질문을하는 경우 요청하십시오. 다른 현명한 도구를 활용하십시오.


updatedb의 문제는 CPU 나 메모리가 아니라 IO 대역폭입니다. 필자의 경우 (큰 CPU와 충분한 메모리를 갖춘 시스템) 하드 드라이브를 하나씩 5MB / s로 하나씩 돌리면서 드라이브에 의존하는 다른 모든 것을 느리게합니다. 그리고 내가 정확히 무엇을 찾고 있는지 알면 새 파일이므로 locate색인이 생성되었는지 확인할 수 없으므로 유용하지 않습니다. 파일이 오래되면 fzf퍼지 검색합니다.
Davidmh

0

아치 리눅스에서 적어도, 그 나타납니다 man-db.timerupdatedb.timer기본 (예 : 다음과 같은 파일이 존재)으로 설정되어 있지만,이 no installation config (WantedBy, RequiredBy, Also, Alias settings in the [Install] section, and DefaultInstance for template units). This means they are not meant to be enabled using systemctl. [...](출력은 systemctl enable {man-,update}db.timer).

파일 시스템에 존재하는 심볼릭 링크는 다음과 같습니다.
/usr/lib/systemd/system/multi-user.target.wants/man-db.timer
/usr/lib/systemd/system/multi-user.target.wants/updatedb.timer

단순히 제거하는 문제입니다.
그러나, 그들은의 업그레이드 / 각 다시 / 설치시 다시 것 man-db, mlocate각각 패키지로 제공된다.

ArchLinux의 경우 가능한 해결 방법은 pacman이 제거 할 수있는 후크를 갖는 것입니다.
그러나 업그레이드를 통해 활성화하려는 경우에도 그러한 각 이벤트에서 제거됩니다.
이 경우 타이머를 활성화하려는 경우 후크를 비활성화 할 수 있습니다.
그러나 타이머를 활성화하면 기본 .timer장치 파일에 systemctl enable타이머 를 직접 구성하는 섹션이 없으므로 패키지를 다시 설치 / 설치 / 업그레이드 할 때만 적용됩니다 . 타이머를 활성화하고 비활성화하려면 링크를 제거하려면
수동 ln -s ../man-db.timer /usr/lib/systemd/system/multi-user.target.wants/man-db.timer또는 ln -s ../updatedb.timer /usr/lib/systemd/system/multi-user.target.wants/updatedb.timer명령이 필요합니다.

허용 할 섹션을 /etc/systemd/system/{man-,update}db.timer제공 WantedBy=multi-user.target하여 사용자 지정 단위를 재정의 [Install]할 수 systemtl enable|disable있지만 링크 /usr/lib/systemd/system/multi-user.target.wants/{man-,update}db.timer는 여전히 다시 설치 / 업그레이드 할 때 생성되어 효과적으로 다시 활성화 할 수 있습니다 .timer.

systemctl mask man-db.timer updatedb.timer타이머를 마스크하기 위해 실행할 수도 있습니다 . 해당 서비스를 시작
하기 위해 수동으로 실행 systemctl start man-db.service updatedb.service하는 것이 가능하더라도 사용자가 원하는 이유에 관계없이 타이머를 수동으로 시작할 수는 없습니다. systemd 는 마스크 된 유닛을 나타 내기 위해 심볼릭 링크로 파일을 교체해야하기 때문에이
해결 방법은 /etc/systemd/system/{man-,update}db.timer원하는 / 필요한 경우 존재하는 사용자 지정 유닛 파일 을 재정의하는 것을 허용하지 않습니다 /dev/null.

마스킹은 가장 방해가되지 않는 솔루션으로 보입니다. 업그레이드 할 때마다
수동으로 제거 /usr/lib/systemd/system/multi-user.target.wants/{man-,update}db.timer하고 수동 활성화 / 비활성화 /etc/systemd/system/{man-,update}db.timer를위한 [Install]섹션 이있는 단위 파일 을 재정의 하는 것이 좋습니다.WantedBy=multi-user.targetsystemctl

불행히도, 현재로서는 생각할 수있는 간단한 해결 방법이 없습니다.
이 패키지가 있다고 가정합니다 man-db, mlocate그들이 원하는 / 유용한 솔루션이 아닐 것이다 제거 : 시스템에 설치된 유지 될 필요가 / 원하고 있습니다.

또한 이것을보십시오 : https://www.reddit.com/r/archlinux/comments/36fqzh/updatedbservice_and_mandbservice_increases_boot/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.