문서 하단에 내용 요약 되어있음.
먼저, rc-local이 실행 중인지 확인 하자.
$ systemctl status rc-local
● rc-local.service - /etc/rc.d/rc.local Compatibility
Loaded: loaded (/usr/lib/systemd/system/rc-local.service; static; vendor preset: disabled)
Active: inactive (dead)
rc-local이 활성화 되어있지 않아 시작해보려 했지만 오류가 발생했다.
$ sudo systemctl start rc-local
● rc-local.service - /etc/rc.d/rc.local Compatibility
Loaded: loaded (/usr/lib/systemd/system/rc-local.service; static; vendor preset: disabled)
Active: inactive (dead)
Condition: start condition failed at 목 2021-07-08 09:32:08 KST; 5s ago
ConditionFileIsExecutable=/etc/rc.d/rc.local was not met
rc.local 파일에 실행 권한이 없어 실행 권한을 추가했다.
$ ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 2월 29 2020 /etc/rc.local -> rc.d/rc.local
$ ll /etc/rc.d/rc.local
-rw-r--r--. 1 root root 553 6월 28 16:54 /etc/rc.d/rc.local
$ sudo chmod u+x /etc/rc.d/rc.local
$ ll /etc/rc.d/rc.local
-rwxr--r--. 1 root root 553 6월 28 16:54 /etc/rc.d/rc.local
권한을 부여하고 rc-local 상태를 확인해보니 정상적으로 실행되었다.
$ sudo systemctl start rc-local
$ systemctl status rc-local
● rc-local.service - /etc/rc.d/rc.local Compatibility
Loaded: loaded (/usr/lib/systemd/system/rc-local.service; static; vendor preset: disabled)
Active: active (running) since 목 2021-07-08 09:43:14 KST; 7s ago
Process: 26652 ExecStart=/etc/rc.d/rc.local start (code=exited, status=0/SUCCESS)
Main PID: 26671 (java)
Memory: 86.6M
CGroup: /system.slice/rc-local.service
├─26671 /wagent/java/jre1.6.0_45/bin/java -Xms16m -Xmx16m -Djava.library.path=/wagent/lib -jar /wagent/WShield-M2.jar
├─26704 /wagent/java/jre1.6.0_45/bin/java -Xms128m -Xmx128m -Djava.library.path=/wagent/lib -jar /wagent/WShield-M.jar &
└─26746 /wagent/WShield-RN.sh "/wagent" &
rc-local 자동 실행을 위해 enable을 시도 했더니 아래와 같은 메시지가 발생하고 'enable'이 아니라 'enable-runtime' 상태로 변경된 것을 확인 했다.
$ sudo systemctl enable rc-local
The unit files have 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.
Possible reasons for having this kind of units are:
1) A unit may be statically enabled by being symlinked from another unit's
.wants/ or .requires/ directory.
2) A unit's purpose may be to act as a helper for some other unit which has
a requirement dependency on it.
3) A unit may be started when needed via activation (socket, path, timer,
D-Bus, udev, scripted systemctl call, ...).
4) In case of template units, the unit is meant to be enabled with some
instance name specified.
$ systemctl list-unit-files | grep rc.local
rc-local.service enabled-runtime
rc-local 서비스 설정에 '[install]' 섹션 설정을 해야한다.
→ 이 내용은 따로 자세하게 확인해야겠다.
섹션 설정 후에 다시 enable하니 정상적으로 작동한다.
/usr/lib/systemd/system/rc-local.service
---------------------------------------------------------------
# 아래 내용 추가
[Install]
WantedBy=multi-user.target
---------------------------------------------------------------
$ sudo systemctl enable rc-local
Created symlink /etc/systemd/system/multi-user.target.wants/rc-local.service → /usr/lib/systemd/system/rc-local.service.
여기까지 설정한 후에도 작동하지 않는 스크립트는 해당 스크립트의 실행권한이 없는 것이다. 파일 소유자에 권한을 부여하고, su 명령어로 사용자를 지정하여 사용하도록 하자.
/etc/rc.local
---------------------------------------------------------------
su user -c "/home/user/startup.sh"
---------------------------------------------------------------
# 테스트를 위한 스크립트
/home/user/startup.sh
---------------------------------------------------------------
DATE=`date +%Y-%m-%d_%H:%M:%S`
touch /home/user/$DATE.txt
---------------------------------------------------------------
# rc.local 파일을 실행하거나, 서버를 재부팅하여 확인할 수 있다.
$ ll
합계 36056
-rw-r--r--. 1 user user 0 7월 8 11:08 2021-07-08_11:08:30.txt
-rwxrw-r--. 1 user user 60 7월 8 11:01 startup.sh
- '[install]' 섹션 설정 관련 참고 사이트
요약
1. rc-local 환경 설정 및 서비스 실행
2. 스크립트 실행에 필요한 적절한 권한 설정
- rc-local 환경 설정 및 서비스 실행
/usr/lib/systemd/system/rc-local.service
---------------------------------------------------------------
# 아래 내용 추가
[Install]
WantedBy=multi-user.target
---------------------------------------------------------------
$ sudo systemctl start rc-local
$ sudo systemctl enable rc-local
- 스크립트에 실행에 필요한 적절한 권한 설정
/etc/rc.local
---------------------------------------------------------------
su user -c "/home/user/startup.sh"
---------------------------------------------------------------
$ chmod u+x /home/user/startup.sh
'IT > System' 카테고리의 다른 글
[Oracle] DB 이관하기(Windows to Ubuntu) (0) | 2021.10.18 |
---|---|
[CentOS] YumRepo Error: All mirror URLs are not using ftp (0) | 2021.07.21 |
[CentOS] CentOS 7.x minimal로 설치 후, ssh 접속 안될 때 (0) | 2021.06.15 |
[Unbuntu] Ubuntu 20.04 네트워크 설정 (0) | 2021.06.15 |
[Windows] SMTP Drop 메일 재 발송 방법 (0) | 2021.06.15 |