従来の理由(別名企業)のために、MySQL 5.5などの以前のサービスも実行する必要がある最新のDebianバージョン(Debian 9、Debian 10)を実行しているサーバーがたくさんあります。これは(既存の)Debian Jessieを介してschroot
構築されました(このガイドを使用してください) このサービスをインストールし、ホストからユーザーをコピーしました。
しかし、私は簡単なものを見つけることができませんでした。信頼できるこれは、schrootがユーザーから来た場合、起動時にそのschrootのサービスが開始されることを意味します。つまり、schrootはrootユーザーの1人が実行しますが、必ずしもroot
。
schrootを起動するスクリプトがあります。
#at /usr/local/bin/start-legacy.sh
schroot -b -c legacy_schroot -u root -n Session
(これはschrootのrootユーザーが実行できます)
そして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'
(2番目のスクリプトに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
これただrootでschrootセッションを開始するには、「su」なしで機能しますが、ユーザーがschrootに接続できるように、通常のユーザーとしてセッションを実行する必要があります。そしてsu、dmesgを除く起動ログが見つからず、起動中に画面が消去されるため、「Unauthorized」エラーが発生します。
動作しても設定するにはrootが必要ですが、crontabソリューションではそうではありません。私は個人的に気にしませんが、MySQLを設定することが唯一の仕事であるとき、上司が技術者にrootアクセス権を喜んで与える意思がないと思います。
tl;dr: 起動時にユーザーに代わって複数のコマンドを実行し、そのユーザーが root である schroot でさまざまな操作を実行したいと思います。