레거시(일명 기업) 이유로 인해 MySQL 5.5와 같은 이전 서비스도 실행해야 하는 최신 Debian 버전(Debian 9, Debian 10)을 실행하는 서버가 많이 있습니다. 이는 (기존의) Debian Jessie를 통해 schroot
구축 되었습니다(이 가이드를 사용하세요)이 서비스를 설치하고 호스트에서 사용자를 복사했습니다.
그러나 나는 간단한 것을 찾지 못했습니다.신뢰할 수 있는이는 schroot가 사용자로부터 온 경우 부팅 시 해당 schroot의 서비스가 시작되도록 함을 의미합니다. 즉, schroot는 루트 사용자 중 한 명이 실행하지만 반드시 root
.
schroot를 시작하는 스크립트가 있습니다.
#at /usr/local/bin/start-legacy.sh
schroot -b -c legacy_schroot -u root -n Session
(이것은 schroot의 루트 사용자가 실행할 수 있습니다)
그리고 crontab은 시작 시 다음을 호출했습니다.
#at the root-user user's crontab -e
@reboot /usr/local/bin/start-legacy.sh
그러나 서비스를 시작하기 위해 시작 시 이 schroot 세션에 명령을 전달하는 방법을 찾을 수 없는 것 같습니다. 다음 중 어느 것도 작동하지 않습니다.
1.- 시작 스크립트 중에 즉시 명령을 전달하십시오.
#at /usr/local/bin/start-legacy.sh
schroot -b -c legacy_schroot -u root -n Session
schroot -r Session -u root -- service mysql start
이렇게 하면 사용자가 로그인하여 수동으로 스크립트를 실행하면 완벽하게 실행되지만 crontab에서 실행하면 다음 명령을 전달하지 않고 세션만 시작됩니다. 또한 오류를 보고하지 않는 것 같으며, 보고하더라도 찾을 수 없습니다.
2a.- crontab에 시작 추가
#at crontab -e
@reboot /usr/local/bin/start-legacy.sh
@reboot sleep 10 && bash -l -c 'schroot -r -c Session -u root -- service mysql start'
crontab에서 이 작업을 수행하면 효과는 위와 같습니다. 스크립트는 정상적으로 시작되지만 시작 명령은 전달되지 않습니다.
2b.- crontab 명령에 시작 스크립트 추가
#at crontab -e
@reboot /usr/local/bin/start-legacy.sh
@reboot sleep 10 && bash -l -c '/usr/local/bin/start-legacy-mysql.sh'
(두 번째 스크립트에 schroot -r
명령이 있는 경우)
같은 차이입니다.
3.- 사용/etc/rc.local
#at /etc/rc.local
su usuario -l -c '/usr/local/bin/start-legacy.sh'
su usuario -l -c '/usr/local/bin/start-legacy-mysql.sh'
exit 0
이것오직루트로 schroot 세션을 시작하려면 "su" 없이 작동하지만 사용자가 schroot에 연결할 수 있도록 일반 사용자로 세션을 실행해야 합니다.그리고su, dmesg를 제외한 부팅 로그를 찾을 수 없고 부팅 중에 화면이 지워지기 때문에 "Unauthorized" 오류가 발생합니다.
작동하더라도 설정하려면 루트가 필요하지만 crontab 솔루션에서는 그렇지 않습니다. 나는 개인적으로 신경쓰지 않지만, MySQL을 설정하는 일이 유일한 업무일 때 상사가 기술자에게 루트 액세스 권한을 기꺼이 부여할 의향이 없다고 생각합니다.
tl;dr: 부팅 중에 사용자를 대신하여 여러 명령을 실행하여 해당 사용자가 루트인 schroot에서 다양한 작업을 수행하고 싶습니다.