๊ฐ์
์๊ฒฉ ์๋ฒ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด์ reboot ์งํํ๋๋ฐ, ์๊ฒฉ ์๋ฒ์์ ์ด์ ์ค์ธ ์๋น์ค๋ค์ด ๋ค ๋ด๋ ค๊ฐ์ ์๋์ผ๋ก ์คํ์์ผ์ผ ํ๋ค.
์ด ๋ฒ๊ฑฐ๋ก์์ ์์ ๊ณ ์, ์๊ฒฉ ์๋ฒ reboot ๋์์ ๋ ์๋์ ์ผ๋ก ์๋น์ค๊ฐ ์คํ๋๋๋ก ์ถ๊ฐํ๋ ค๊ณ ํ๋ค.
๋ฐฉ๋ฒ
1. systemd์ ์ถ๊ฐ
2. crontab์ ์ถ๊ฐ
๋ฐฉ๋ฒ 1๏ธโฃ systemd
1. ์๋น์ค ํ์ผ ์์ฑ
sudo vim /etc/systemd/system/my_service.service
2. ์๋น์ค ํ์ผ ์์ฑ
[Unit]
Description=Activate service automatically when rebooting this server.
After=network.target
[Service]
ExecStart=/bin/bash -c "source /home/my_name/anaconda3/etc/profile.d/conda.sh && conda activate /home/my_name/.conda/envs/my_env && python /home/my_name/my_service/main.py"
Restart=always
User=my_name
WorkingDirectory=/home/my_name/my_service
StandardOutput=append:/home/my_name/my_service/logfile.log
StandardError=append:/home/my_name/my_service/errorfile.log
[Install]
WantedBy=multi-user.target
- ExecStart
- source /home/my_name/anaconda3/etc/profile.d/conda.sh
- conda๋ฅผ ์ด๊ธฐํ
- conda.sh ์คํฌ๋ฆฝํธ๋ Conda ํ๊ฒฝ์ ํ์ฑํํ๋ ๋ฐ ํ์
- conda activate /home/my_name/.conda/envs/my_env
- ํ๊ฒฝ์ ํ์ฑํ
- python /home/my_name/my_service/main.py
- ํ๊ฒฝ ํ์ฑํ ํ ์คํํ ์คํฌ๋ฆฝํธ๋ฅผ ์ง์
- source /home/my_name/anaconda3/etc/profile.d/conda.sh
3. ์๋น์ค ํ์ฑํ ๋ฐ ์คํ
sudo systemctl daemon-reload
sudo systemctl enable my_service.service
sudo systemctl start my_service.service
4. ์๋น์ค ์ํ ํ์ธ
$ sudo systemctl status my_service.service
โ my_service.service - Activate service automatically when rebooting this server.
Loaded: loaded (/etc/systemd/system/my_service.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2025-01-06 14:33:08 KST; 1min 18s ago
Main PID: 3239090 (python)
Tasks: 4 (limit: 154179)
Memory: 118.7M
CGroup: /system.slice/my_service.service
โโ3239090 python /home/my_name/my_service/app/main.py
โโ3239101 /home/my_name/.conda/envs/my_service/bin/python -c from multiprocessing.resource_tracker import main;main(5)
โโ3239102 /home/my_name/.conda/envs/my_service/bin/python -c from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=6, pipe_handle=8) --multi>
1์ 06 14:33:08 workstation systemd[1]: Started Activate service automatically when rebooting this server..
๋ฐฉ๋ฒ 2๏ธโฃ crontab
1. crontab ํธ์ง
crontab -e
2. ๋ถํ ์ ์คํ ๋ช ๋ น ์ถ๊ฐ
@reboot /bin/bash -c "source /home/dde/anaconda3/etc/profile.d/conda.sh && conda activate /home/cvteam/.conda/envs/GradelWeb && python /home/my_name/my_service/main.py > /home/my_name/my_service/logfile.log 2>&1 &"
3. ํ ์คํธ
- ์๋ฒ ์ฌ๋ถํ ํ ์คํ ์ฌ๋ถ ํ์ธ
ps aux | grep main.py
๐ ์ ๋ฆฌ
crontab๋ณด๋ค systemd๋ฅผ ์ถ์ฒํ๋ ์ด์ ๋ ๊ธฐ๋ฅ์ฑ, ์ ์ฐ์ฑ, ๊ด๋ฆฌ์ฑ ๋๋ฌธ!
ํนํ ์๋ฒ ํ๊ฒฝ์์๋ ์์ ์ ์ด๊ณ ์ง๊ด์ ์ธ ์๋น์ค ๊ด๋ฆฌ๊ฐ ์ค์ํ๊ธฐ ๋๋ฌธ์ systemd๊ฐ ๋ ์ ํฉํ๋ค !!
- ์๋น์ค ๊ด๋ฆฌ
systemd๋ ์๋น์ค๋ฅผ ์์, ์ค์ง, ์ฌ์์, ์ํ ํ์ธ ๋ฑ์ ๋ช ๋ น์ ํตํด ๊ฐํธํ๊ฒ ์ ์ดํ ์ ์๋ค:
sudo systemctl start my_service
sudo systemctl stop my_service
sudo systemctl restart my_service
sudo systemctl status my_service
rontab์ ์ด๋ฌํ ์ ์ด ๊ธฐ๋ฅ์ด ์์ผ๋ฉฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋ ๋๋ฒ๊น ๊ณผ ๊ด๋ฆฌ๊ฐ ์ด๋ ต๋ค.
- ๋ก๊ทธ ๊ด๋ฆฌ
systemd๋ ์๋น์ค์ ํ์ค ์ถ๋ ฅ๊ณผ ์ค๋ฅ ๋ก๊ทธ๋ฅผ ์๋์ผ๋ก ์ ์ฅํ๊ณ , journalctl ๋ช ๋ น์ด๋ก ์ฝ๊ฒ ํ์ธํ ์ ์๋ค:
journalctl -u my_service
crontab์์๋ ์ถ๋ ฅ์ด๋ ์ค๋ฅ๋ฅผ ํ์ผ๋ก redirectionํด์ผ ํ๋ฉฐ, ๋ณ๋๋ก ์ค์ ํ์ง ์์ผ๋ฉด ๋๋ฒ๊น ์ด ๋ณต์กํ๋ค.
- ์๋ ์ฌ์์ ๋ฐ ๋ณต๊ตฌ
systemd๋ ์๋น์ค๊ฐ ๋น์ ์ ์ข ๋ฃ๋์์ ๋ ์๋์ผ๋ก ์ฌ์์ํ ์ ์๋ค:
[Service]
Restart=always
RestartSec=5
์ด๋ ์ฅ์๊ฐ ์คํ๋๋ ํ๋ก์ธ์ค์์ ์์ ์ฑ์ ๋ณด์ฅํ๋ค.
crontab์๋ ์ด๋ฌํ ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ์ด ์์ด, ์คํฌ๋ฆฝํธ๊ฐ ์คํจํ๋ฉด ์๋ ๊ฐ์ ์ด ํ์ํ๋ค.
- ์์กด์ฑ ๊ด๋ฆฌ
systemd๋ ์๋น์ค๊ฐ ์คํ๋ ๋ ํ์ํ ์์กด์ฑ์ ์ ์ํ ์ ์๋ค:
[Unit]
After=network.target
์๋ฅผ ๋ค์ด, ๋คํธ์ํฌ๊ฐ ์ค๋น๋ ํ์๋ง ์๋น์ค๊ฐ ์คํ๋๋๋ก ์ค์ ๊ฐ๋ฅํ๋ค.
crontab์์๋ ์ด์ ๊ฐ์ ์์กด์ฑ ๊ด๋ฆฌ๊ฐ ์ด๋ ต๊ณ , ์คํฌ๋ฆฝํธ ๋ด๋ถ์์ ๋ชจ๋ ์ค๋น๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค.