Из Справочное руководство по загрузке весны
Установка в качестве службы init.d (System V)
Просто добавьте символ jar в
init.d
для поддержки стандартных командstart
,stop
,restart
иstatus
. Предполагая, что у вас есть приложение Spring Boot, установленное в / var / myapp, для установки приложения Spring Boot в качестве службы init.d просто создайте символическую ссылку:$ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp
После установки вы можете запускать и останавливать обслуживание обычным способом. Например, в системе на базе Debian:
$ service myapp start
Если ваше приложение не запускается, проверьте файл журнала, записанный на
/var/log/
для ошибок..log Продолжайте чтение , чтобы узнать, как защитить развернутую службу.
После выполнения в письменной форме я обнаружил, что моя служба не запускается с этим сообщением об ошибке в logs: start-stop-daemon: непризнанная опция --no-close . И мне удалось исправить это, создав конфигурационный файл
/var/myapp/myapp.conf
со следующим содержимымUSE_START_STOP_DAEMON=false
Я не могу выяснить ошибку в коде, может кто-нибудь, пожалуйста, взгляните на нее и помогите мне понять, что я здесь делаю неправильно.
blockquote>Проблема в том, что вы инициализируете статический элемент
cnt
следующим образомtemplate <size_t N> size_t RLE<N>::cnt = 1 + RLE<N - 1>::cnt; size_t RLE<0>::cnt = 0;
, поэтому вы получаете
cnt == N
, когда компилятор использует инициализированное значениеRLE<N - 1>::cnt
(случай g ++ ),cnt == 1
когдаN > 0
, когда компилятор использует ноль дляRLE<N - 1>::cnt
(случай clang ++).Я не знаю, кто прав, но дело в том, что когда вы пишете
cout << cnt << *p; cnt = 0;
, вы печатаете
cnt
вRLE<N>
- такN
или1
, в зависимости от случая - и вы обнулитеcnt
вRLE<N>
.Но когда вы обнуляете
cnt
вRLE<N>
,cnt
вRLE<N-1>
остаются неизменными (такN-1
или1
, в зависимости от случая).Я не вижу большого количества метапрограммирования в вашем коде, но мне кажется, что возможное исправление установлено для всех
cnt
равным 1template <size_t N> size_t RLE<N>::cnt = 1; size_t RLE<0>::cnt = 1;
и для
RNE<N-1>::cnt
установлено значениеcnt + 1
вCompress()
]static void Compress(char const p[]) { if (!(*p == *(p + 1))) { cout << cnt << *p; cnt = 0u; } RLE<N - 1>::cnt = cnt+1u; <--- add this line RLE<N - 1>::Compress(p + 1); }
Но, честно говоря, я предпочитаю ваш оригинальный (не метапрограммирующий) код.