리λ μ€μμ νλ‘μΈμ€ μ€ν μ μ§νκΈ°
μλ νμΈμ Mambo μ λλ€.
μλ²μμ μ€νμ€μΈ μ ν리μΌμ΄μ μ μΈμ λ μ§ μκΈ°μΉ μμ μν©μΌλ‘ μ€λ¨λ μ μμ΅λλ€. μλ₯Ό λ€μ΄, μΌμμ μΌλ‘ μ λ ₯μ΄ μ°¨λ¨λμ΄ μλ² μ₯λΉκ° λ€μ μμλκ±°λ μ ν리μΌμ΄μ νλ‘μΈμ€κ° μλ² μμμ λ§μ΄ μ¬μ©ν΄μ νλ‘μΈμ€κ° μ€λ¨λλ μν©μ΄ λ°μν μ μμ΅λλ€.
κ·Έλμ μ€λ μμλ³Ό λ΄μ©μ 리λ μ€μμ μκΈ°μΉ μμ μν©μΌλ‘ μΈνμ¬ νλ‘μΈμ€κ° μ€λ¨λμμ κ²½μ° μλμΌλ‘ νλ‘μΈμ€λ₯Ό λ€μ μ€νμν΄μΌλ‘μ¨ νλ‘μΈμ€ μ€ν μνλ₯Ό μ μ§νκΈ° μν λ°©λ²μ λλ€.
νλ‘μΈμ€ μ€ν μ μ§
λ¨Όμ , μ€νλ§ λΆνΈ μ ν리μΌμ΄μ μ λ€μκ³Ό κ°μ΄ μ€νν μ μλ€κ³ κ°μ νκ² μ΅λλ€.
nohup java -jar -Xmx500m demo.war 1> app.log 2>&1 &
# [1] 227
ls -l
# total 21M
# -rw-r--r-- 1 ec2-user ec2-user 2.0K Oct 8 15:19 app.log
# -rw-r--r-- 1 ec2-user ec2-user 3 Oct 8 15:19 app.pid
# -rwxr-xr-x 1 ec2-user ec2-user 20M Oct 8 12:28 demo.war*
cat app.pid
# 227
μ μμμμ nohup λͺ λ Ήμ΄λ₯Ό μ¬μ©νκ³ μΆλ ₯λ νλ‘μΈμ€ μμ΄λμ μ€νλ§ λΆνΈ μ ν리μΌμ΄μ μμ ApplicationPidWriterμ μν΄ μμ±λ νλ‘μΈμ€ μμ΄λ νμΌμ΄ λμΌν κ²μ νμΈν μ μμ΅λλ€.
νλ‘μΈμ€ μμ΄λ νμΈνκΈ°
μμ μ€νλ§ λΆνΈ μ ν리μΌμ΄μ μ²λΌ μ ν리μΌμ΄μ μ체μ μΌλ‘ νμ¬ μ€νμ€μΈ νλ‘μΈμ€ μμ΄λλ₯Ό μ μ₯ν μ μλ κΈ°λ₯μ ν¬ν¨νκ³ μλ€λ©΄ μ’κ² μ§λ§ κ·Έλ μ§ μμ μ μμ΅λλ€. κ·Έλμ μ΄λ―Έ μ€νμ€μΈ νλ‘μΈμ€ μμ΄λλ₯Ό νμΈνκ³ κ°μ Έμ¬ μ μλ λ°©λ²μ μμμΌ ν©λλ€.
# echo $!
nohup java -jar -Xmx500m demo.war 1> app.log 2>&1 & echo $! > app.pid
# JPS(JVM Process Status)
jps -v | grep war | awk '{print $1}'
# ps -ef
ps -ef | grep java | grep -v grep | awk '{print $2}'
# netstat -tnlp
netstat -tnlp | grep java | awk '{print $7}' | awk -F '/' '{print $1}'
# pgrep
pgrep java
첫λ²μ§Έ λ°©μμ μ¬μ©λ echo $! λ λ§μ§λ§μΌλ‘ λ°±κ·ΈλΌμ΄λμμ μ€νλ λͺ λ Ήμ΄μ λν PIDκ°μ μΆλ ₯ν μ μλ λͺ λ Ήμ΄μ λλ€.
CrontabμΌλ‘ νλ‘μΈμ€ μ μ§νκΈ°
μΌλ°μ μΌλ‘ μ¬μ©λλ κ³ μ μ μΈ λ°©μμ μμ λ€μν λ°©μμΌλ‘ μΆμΆλ νλ‘μΈμ€ μμ΄λμ λν νλ‘μΈμ€ μ€ν μνλ₯Ό 체ν¬νλ μ€ν¬λ¦½νΈλ₯Ό Crontabμ ν΅ν΄ μ£ΌκΈ°μ μΌλ‘ μ€ννλ κ²μ λλ€.
#!/bin/sh
PID_FILE="app.pid"
autorun () {
# ... & echo $! > app.pid
}
if [ -f "$PID_FILE" ] && [ ! -z `cat "$PID_FILE"` ]; then
PID=$(cat $PID_FILE)
if ps -p $PID > /dev/null; then
echo "$PID_FILE($PID) is running"
else
autorun
fi
else
autorun
fi
SystemD
λ ν¨μ¨μ μΈ λ°©μμ Nginxμ κ°μ ν¨ν€μ§λ₯Ό APT λλ YUMμΌλ‘ μ€μΉν λ SystemD μλΉμ€μ μλμΌλ‘ λ±λ‘νλ κ²μ²λΌ μ ν리μΌμ΄μ μ μ€ννλ λͺ λ Ήμ΄ λλ μ€ν¬λ¦½νΈλ₯Ό SystemD μλΉμ€λ‘ λ±λ‘νλ κ²μ λλ€.
/etc/systemd/system/demo.service
[Unit]
Description=Demo
After=syslog.target
[Service]
User=ec2-user
WorkingDirectory=/home/ec2-user
ExecStart=/usr/bin/java -jar -Xmx500m demo.war
ExecStop=kill -9 `cat app.pid`
SuccessExitStatus=143
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
μμ κ°μ΄ μ€ν¬λ¦½νΈλ₯Ό μ μνλ€λ©΄ λ€μκ³Ό κ°μ΄ μλ²κ° μ€νλ λ μλΉμ€κ° μμλλλ‘ νμ±ννκ±°λ μ§μ μλΉμ€λ₯Ό μ€ννκ³ μ’ λ£ν μ μμ΅λλ€.
sudo systemctl daemon-reload
sudo systemctl enable demo.service
sudo systemctl start demo.service
κ°μ¬ν©λλ€.