"/etc/rc.local"파일은 시스템이 부팅하고 나서 맨 마지막에 실행되는 스크립트입니다. 그래서 사용자가 부팅 시 자동 실행하는 프로그램을 설정할 때 여기에 넣어서 실행시킬 수 있습니다. 파일 내용을 보면 다음과 같습니다.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\\n" "$_IP"
fi

exit 0

중간 부분에 보면 이런 내용이 있습니다.

# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

이 스크립트를 실행하려면 실행권한이 있어야하고 그리고 자체적으로 이 스크립트는 비활성화 되어있어서 사용하려면 따로 활성화 시키는 과정을 거쳐야 한다.

라즈베리파이 4  Model B+ 에서는 rc.local 파일이 자동으로 활성화되지 않아서 사용자가 해주어야 하는 방식으로 변경이 된 것 같습니다.

$sudo systemctl status rc.local 명령으로 상태를 보면 아래와 같습니다. 주황색 글씨로 무언가 제대로 되지 않는 것처럼 보입니다. CTRL-C 키를 눌러 나옵니다. 같은 동작을 수행하는 명령어는

$sudo systemctl status rc-local.service
pi@raspberrypi:~ $ sudo systemctl status rc.local
Warning: The unit file, source configuration file or drop-ins of rc-local.service changed on disk. Run 'systemctl d
● rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; enabled-runtime; vendor preset: enabled)
  Drop-In: /usr/lib/systemd/system/rc-local.service.d
           └─debian.conf
           /etc/systemd/system/rc-local.service.d
           └─ttyoutput.conf
   Active: failed (Result: exit-code) since Mon 2021-07-26 18:33:09 KST; 29min ago
     Docs: man:systemd-rc-local-generator(8)
  Process: 480 ExecStart=/etc/rc.local start (code=exited, status=1/FAILURE)

 7월 26 18:33:01 raspberrypi systemd[1]: Starting /etc/rc.local Compatibility...
 7월 26 18:33:01 raspberrypi rc.local[480]: wlan0     Interface doesn't support scanning : Network is down
 7월 26 18:33:09 raspberrypi rc.local[480]: Failed to start hostapd.service: Unit hostapd.service is masked.
 7월 26 18:33:09 raspberrypi systemd[1]: rc-local.service: Control process exited, code=exited, status=1/FAILURE
 7월 26 18:33:09 raspberrypi systemd[1]: rc-local.service: Failed with result 'exit-code'.
 7월 26 18:33:09 raspberrypi systemd[1]: Failed to start /etc/rc.local Compatibility.
lines 1-17/17 (END)

우선 실행 권한을 아래와 같이 확인합니다. 권한은 다 들어가 있는데 혹시 설정을 하실 때는 $sudo chmod +x /etc/rc.d/rc.local 명령으로 수정합니다.

pi@raspberrypi:~ $ ls /etc/rc.local -l
-rwxr-xr-x 1 root root 1758  7월 26 18:27 /etc/rc.local
pi@raspberrypi:~ $

다음으로 "/usr/lib/systemd/system/rc-local.service" 파일을 수정합니다. 활성화를 위해서 꼭 필요한 절차라고합니다. 맨 아래에 다음 내용을 추가합니다. 다음과 같은 명령어로 파일을 열어 수정합니다.

pi@raspberrypi:~ $ sudo nano /usr/lib/systemd/system/rc-local.service
[Install]
WantedBy=multi-user.target

아래와 같이 가장 아래 코드가 변경되었습니다.

#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target

다음 서비스를 실행합니다. 재부팅 시에도 활성화 되도록 아래 명령어를 입력합니다.

$sudo systemctl enable rc-local.service

설정이 제대로 되었는지 확인합니다.

$sudo systemctl list-unit-files | grep rc.local

아래는 참고 코드이고, rc.local 파일에서 hostapd.service 에서 에러가 나서 수정하는 과정을 보여주는 코드라서 참고하실 필요는 없습니다. ^^