Хорошо, я опытный разработчик на стороне клиента и теперь успешно создал приложение на стороне сервера, используя Java / MongoDB для API и NodeJS для общедоступных ответов html.
Все нормально, кроме сомнений.
Как мне запускать исполняемые файлы сервера?
В настоящее время я запускаю mongodb, используя systemd
, поэтому при запуске он будет запускаться автоматически.
Затем я открываю screen
и запустите приложение NodeJS, используя supervisor
программа, она перезапустит приложение при сбое.
На новой вкладке я запускаю приложение Java напрямую, используя java -jar main/application.jar
Теперь я могу отсоединиться screen
и близко ssh
.
НО, Должен ли я переносить эти исполняемые файлы в службы или все нормально работать, как я?
Вы должны использовать systemd для запуска и управления серверными приложениями.
Если вы запустите приложение с экрана, вы не сможете автоматически перезапустить их при перезагрузке. Ниже приведен пример кода сценария systemd, который запускает приложение jar как службу. Вы можете поместить его в /etc/systemd/system/test.service, а затем запустить службу с помощью systemctl start test
Этот скрипт был протестирован на RHEL 7
[Unit]
Description=java application descrption
#After=NetworkManager.service
[Service]
Type=simple
ExecStart=/usr/bin/java -jar /root/tmp/test.jar
ExecStop=pkill -f '/root/tmp/test.jar'
#ExecReload=
PIDFile=/var/run/jboss-as/test.jar.pid
[Install]
WantedBy=multi-user.target
Серверный материал должен запускаться / останавливаться автоматически с сервером и работать в фоновом режиме... в большинстве современных дистрибутивов Linux это, вероятно, будет сделано с systemd
(как я уже сказал). Старые дистрибутивы будут system V init
скрипты в /etc/init.d
(или аналогичный) или иногда upstart
в /etc/init
(Ubuntu).
Лично я не думаю, что правильно спроектированные демоны (серверное программное обеспечение / службы) должны требовать оболочки / мониторы, такие как screen или supervisor для правильной работы. Они должны позаботиться о себе, как и о большинстве других вещей, поставляемых с Linux (серьезно, посмотрите на это).