Anahtar satırıyla bir python3 komut dosyası (diyelim startup.sh
) başlatan bir bash komut dosyası var :
nohup python3 -u <script> &
ssh
Doğrudan içeri girdiğimde ve bu komut dosyasını çağırdığımda, çıktıktan sonra python komut dosyası arka planda çalışmaya devam ediyor. Ancak, bunu çalıştırdığınızda:
ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> "./startup.sh"
İşlem, çalışmayı bitirir bitirmez sona erer ssh
ve oturumu kapatır.
İkisi arasındaki fark nedir?
EDIT: python betiği şişe üzerinden bir web hizmeti çalıştırıyor.
EDIT2: Ben de çağıran ve koştu , ama aynı davranış var bir init komut dosyası oluşturmaya çalıştım .startup.sh
ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> "sudo service start <servicename>"
EDIT3: Belki de senaryoda başka bir şeydir. İşte betiğin büyük kısmı:
chmod 700 ${key_loc}
echo "INFO: Syncing files."
rsync -azP -e "ssh -i ${key_loc} -o StrictHostKeyChecking=no" ${source_client_loc} ${remote_user}@${remote_hostname}:${destination_client_loc}
echo "INFO: Running startup script."
ssh -i ${key_loc} -o StrictHostKeyChecking=no ${remote_user}@${remote_hostname} "cd ${destination_client_loc}; chmod u+x ${ctl_script}; ./${ctl_script} restart"
EDIT4: Son satır bir uyku ile son çalıştırdığınızda:
ssh -i ${key_loc} -o StrictHostKeyChecking=no ${remote_user}@${remote_hostname} "cd ${destination_client_loc}; chmod u+x ${ctl_script}; ./${ctl_script} restart; sleep 1"
echo "Finished"
Asla ulaşmaz echo "Finished"
ve daha önce hiç görmediğim Şişe sunucusu mesajını görüyorum:
Bottle vx.x.x server starting up (using WSGIRefServer())...
Listening on <URL>
Hit Ctrl-C to quit.
SSH'yi manuel olarak içeri alıp süreci kendim öldürürsem "Bitti" yi görüyorum.
EDIT5: EDIT4 kullanarak, herhangi bir uç noktaya bir istekte bulunursam, bir sayfa geri alıyorum, ancak Şişe hata veriyor:
Bottle vx.x.x server starting up (using WSGIRefServer())...
Listening on <URL>
Hit Ctrl-C to quit.
----------------------------------------
Exception happened during processing of request from ('<IP>', 55104)
strace
, Linux kullanıyorsanız veya truss
Solaris kullanıyorsanız ve nasıl / neden sonlandığını görmek için bunu altında çalıştırmak olabilir . Mesela ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> strace -fo /tmp/debug ./startup.sh
.
&
Başlangıç komut dosyasının sonundaki seçeneğini kullanmayı denediniz mi? Ekleme &
üst kimliği (üst kimlikler ölmesi çocuklarını ne zaman) olmaktan ssh oturumu bağımlılığını alır götürür. Ayrıca bu önceki yazı dayalı yinelenen bir soru olduğunu düşünüyorum . Bir önceki cümlede size gönderdiğim gönderi, bu gönderinin daha iyi ayrıntı verebilecek bir kopyası .
nohup ./startup.sh &
önce denedim , ama aynı davranış vardı. startup.sh
zaten bir çatal içeriyor ( nohup python3 -u <script> &
), bu yüzden tekrar çatallamaya ihtiyacım olmadığından eminim.