재부팅 할 때마다 / var / run에 생성 된 폴더


60

최근 우분투 스 (특히, 가장 관심있는 것은 12.04입니다) /var/run는 tmpfs이므로 재부팅 할 때마다 비어 있다고 가정합니다.

그러나 나는 몇 가지 다른 폴더와 같은 폴더를 볼 /var/run/mysqld수 있습니다. 재부팅 할 때마다 해당 폴더가 어떻게 만들어 집니까? 복사 한 템플릿 폴더가 있습니까 /var/run/(그렇다면 어떤 스크립트가 그렇게합니까) 또는 각 폴더가 mkdir별도로 또는 무엇입니까?

편집 : 영구적이거나 영구적 인
답변을하지 마십시오 . 그렇지 않기 때문에./var/run/run

가에 그렇게하더라도 당신의 시스템은 정기적 12.04에 그렇게하지 않습니다.


흠, 그래서 50 명의 담당자가 있습니다. 명백히 틀린 두 가지 답변 중 하나에 낭비되었습니다. ...
Sandman4

누군가, 현명한 답변을하시면 +50 담당자를 받으실 수 있습니다 :)
Sandman4

답변:


82

(@Zulakis에게 감사 드리며 Serverfault에 대한 답변은이 답변이 Ubuntu의 지속적인 개발 에 미치지 못했음 을 지적했습니다.)

15.04를 채택함에 systemd따라 이제 임시 파일 및 이와 같은 디렉토리를 작성하기위한 중앙 집중식 메커니즘이 있습니다. 제거 할 수있는이 방법을 사용하고자하는 서비스 자체의 시작 스크립트에서 명령을 대신 장소 에서 파일을 , 또는 우분투 서비스가 마지막 옵션을 선호하는 것처럼 보이는 함께. 예를 들어, 내 시스템에는 다음이 있습니다.mkdir.conf/etc/tmpfiles.d/run/tmpfiles.d/usr/lib/tmpfiles.d

$ egrep -r /var/run /usr/lib/tmpfiles.d

/usr/lib/tmpfiles.d/var.conf:L /var/run - - - - ../run
/usr/lib/tmpfiles.d/sudo.conf:d /var/run/sudo 0711 root root
/usr/lib/tmpfiles.d/sudo.conf:D /var/run/sudo/ts 0700 root root
/usr/lib/tmpfiles.d/postgresql.conf:d /var/run/postgresql 2775 postgres postgres - -
/usr/lib/tmpfiles.d/sshd.conf:d /var/run/sshd 0755 root root
/usr/lib/tmpfiles.d/screen-cleanup.conf:d /var/run/screen 0775 root utmp

d가 존재하지 않는 경우 그 경로이며, 나머지는 권한, 사용자 및 그룹입니다 후 수단은 디렉토리를 만들 수 있습니다. 해당 디렉토리는 해당 서비스의 시작 여부에 관계없이 작성됩니다.

전체 설명서는을 참조하십시오 man tmpfiles.d.


오래된 사전 시스템 답변 :

시작될 때 개별 서비스에 의해 동적으로 생성 된 것처럼 보입니다.

$ sudo egrep -r 'mkdir.*/var/run' /etc

/etc/init.d/ssh:        mkdir /var/run/sshd
/etc/init.d/bind9:      mkdir -p /var/run/named
/etc/init.d/timidity:    mkdir -p /var/run/timidity
/etc/init.d/bzflag:                mkdir -p /var/run/bzflag
/etc/init.d/dns-clean:mkdir /var/run/pppconfig >/dev/null 2>&1 || true
/etc/init/winbind.conf: mkdir -p /var/run/samba/winbindd_privileged
/etc/init/dbus.conf:    mkdir -p /var/run/dbus
/etc/init/ssh.conf:    mkdir -p -m0755 /var/run/sshd
/etc/init/libvirt-bin.conf:     mkdir -p /var/run/libvirt
/etc/init/cups.conf:    mkdir -p /var/run/cups/certs

나는 이것이 mysqld를 다루는 것이라고 믿는다.

[ -d /var/run/mysqld ] || install -m 755 -o mysql -g root -d /var/run/mysqld
/lib/init/apparmor-profile-load usr.sbin.mysqld

man install -d 형식은 "지정된 디렉토리의 모든 구성 요소를 작성합니다"라고 말합니다.


1
항상 그런 것은 아닙니다. serverfault.com/questions/824393/…
Zulakis

감사합니다, @Zulakis. 이 기능에 대한 경험을 바탕으로 내용을 수정했으며 올바른지 알고 싶습니다.
Paul

1
나에게 좋아 보인다! 답변을 업데이트 해 주셔서 감사합니다 :)
Zulakis

1
egrep -r 명령에 대한 투표. 파일 검색 내에서 검색을 찾고있었습니다! :-)
Nick Woodhams

5

새로운 tmpfs 마운트 /run폴더는 udev, lvm 및 mdadm과 같은 프로그램이 종료 될 때까지 런타임 데이터를 initrd에서 유지하도록합니다.

/var 는 모든 Linux / UNIX 시스템의 표준 디렉토리입니다. "변수"를 나타내며 많은 로그, cahces, BUT도 변수 설정 파일을 프로그래밍하고 일부 시스템 구성 데이터베이스가 상주하는 곳입니다.

대부분의 물건 /var은 시스템에 의해 적절하게 제거되고 규제되어야합니다. 가상 메모리에 대한 스왑 파일도 살아 /var있으므로 그렇게 망설이지 마십시오. /var/run또한 적극적으로 실행중인 프로세스 데만의 많은 상태 및 매개 변수 정보를 보유합니다.

이 디렉토리에는 시스템 부팅 이후 시스템을 설명하는 시스템 정보 데이터가 들어 있습니다. 이 디렉토리 아래의 파일은 부트 프로세스 시작시 지워야합니다 (적절한 경우 제거 또는 잘림). 프로그램의 하위 디렉토리는 /var/run; 이것은 하나 이상의 런타임 파일을 사용하는 프로그램에 권장됩니다.

그 이후 /var/run로 tmpfs로 마운트되었습니다. 이것은 컴퓨터가 부팅 할 때 완전히 비어 있음을 의미하며, 남은 PID 파일로 인해 데몬과 같은 것들이 시작되지 않도록하기 위해 이와 같이 설계되었습니다.

시작 스크립트는 일반적으로 사용하기 전에 필요한 디렉토리를 만듭니다. PID 파일을 저장 /var/run하려면 PID 파일을 작성하기 전에 직접 넣거나 디렉토리를 작성하십시오. 이것은 재부팅 할 때 데이터를 보관할 장소가 아닙니다.

출처 : 경로 이름 및 Linux 시스템 관리자 안내서


5

디렉토리를 작성하여 /var/run양말이나 pid 파일 또는 무엇이든 저장할 수 있도록 응용 프로그램을 구성하는 방법에 대한 솔루션을 찾고 있기 때문에이 스레드를 발견하는 사람은 여기에 예제가 있습니다. MySQL 양말 파일을에 저장하려고했기 때문에이 스레드를 발견했습니다 /var/run/mysqld. 그래서이 스레드를 발견 한 후 /etc/init파일에서 예제를 찾기 시작했습니다 . dbus는 좋은 것이었다. 그리고이 mysql 시작 구성을 생각해 냈습니다.

start on runlevel [2345] 
stop on runlevel [!2345] 
expect daemon 

pre-start script 
    mkdir -p -m0755 /var/run/mysqld 
    chown mysql:mysql /var/run/mysqld 
end script 

exec /etc/init.d/mysql start 
pre-stop exec /etc/init.d/mysql stop 

사전 시작 스크립트 부분에서 트릭을 수행했습니다.


2

그러나 / var / run / mysqld 및 기타 폴더와 같은 일부 폴더가 있습니다. 각 폴더에서 생성 된 폴더는 어떻게 다시 부팅됩니까? / var / run /에 복사 한 템플릿 폴더 (있는 경우 어떤 스크립트가 그렇게하는지) 또는 mkdir로 개별화 된 각 폴더가 있습니까?

에 정의 된 바와 같이 파일 계층 구조 표준/var/run 또는 /run휘발성 런타임 데이터를 저장하는 데 사용됩니다.

거기에 생성 된 모든 폴더와 파일은 파일을 생성 한 해당 프로그램에 의해 관리됩니다. 복사되는 템플릿 폴더와 같은 것은 없으며 모든 프로그램은 해당 폴더를 사용하여 일시적인 정보를 저장할 수 있습니다. 시스템을 재부팅하면 저장된 데이터가 손실됩니다.

/run폴더 를 사용하는 일반적인 방법 pid은 프로세스의 프로세스 번호를 포함하는 마커 파일 인 실행중인 데몬 을 저장하는 것 입니다. 이들은 주로 예를 들어 찾을 수있는 시작 / 중지 스크립트에 사용됩니다./etc/init.d/

나는 그것이 당신에게 일을 분명히하기를 바랍니다!

br


1

당신의 가정은 절대적으로 정확하지 않습니다. /var폴더 의 위치 는 협상 가능 /var합니다. 즉, 폴더 를 찾을 대체 파티션이나 볼륨을 사용할 수 있습니다 . /var폴더 의 위치에 관계없이 폴더는 /var/run폴더에 대한 심볼릭 링크 /run이며 재부팅 후에도 그 내용이 남아 있지만 /run부팅 중에 시작되는 서비스에 의해 부팅시 많은 파일 이 생성되거나 수정됩니다. 따라서 mysqld파일을 /var/run디렉토리 로로드 하는 서비스와 같은 서비스 이며 현재 존재하지 않는 경우 서브 디렉토리를 작성하도록 설정됩니다.


1
/ var / run에 일부 폴더를 만들었고 재부팅 후 사라졌습니다. (특히 12.04에)
Sandman4


-2

douggro는 절대적으로 맞습니다. / var / run은 tmpfs로 마운트되며 / var / run은 재부팅 동안 지속되는 / run에 대한 심볼릭 링크이므로 / run에 들어가는 모든 항목은 / var /에 나타납니다. 운영.

따라서 부팅시 시작되는 데몬 인 mysqld와 같은 / boot에서 파일을 만드는 모든 부트 서비스는 / var / run에서 파일을 볼 수 있습니다 (/ run remember에 대한 심볼릭 링크). / var / run에서 재부팅을 통해 지속될 파일을 만들려면 / run에 파일을 만든 다음 재부팅하십시오.

이것이 귀하의 질문에 대답하기를 바랍니다.


3
둘 다 잘못되었거나 비표준 설정을 사용하고 있습니다. 스스로 확인하십시오. 마운트 | grep / run .... tmpfs on / run type tmpfs
Steven K

1
"/ var / run에서 재부팅해도 지속되는 파일을 만들려면 / run에 파일을 만든 다음 재부팅하십시오." 맞지 않습니다. tmpfs휘발성이며 변경 사항이 손실됩니다.
ortang
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.