Fork me on GitHub
#clojure-russia
<
2017-05-05
>
andmed11:05:11

Еще в копилку сторроников модулярности в жава. http://mail.openjdk.java.net/pipermail/jpms-spec-observers/2017-May/000870.html

dbushenko12:05:23

всем привет!

kgofhedgehogs13:05:17

Привет всем. Вот я написал программу, которая собрана в jar и у нее есть -main. В программе много printов, я хотел бы, чтобы они логгировались в файл, т.к. программа будет запущена в бекграунде. Я попробовал добавить java -jar myprogram.jar &>> out.txt, оно работало, но когда программа запускается от имени рута при старте системы и работает как демон и весь оутпут у нее подавлен и ничего с помощью этого не логгируется. Можно инструментами кложуры легко все принты и экзепшены отправить в файл?

ilevd13:05:12

А как она как демон запускается? Перезапускается если упадет? Может supervisor подойдет? Там можно указать чтобы в файл принты и логи шли.

kgofhedgehogs13:05:47

Если падает, то не перезапускается. Возможно, я не корректно выразился, когда сказал "как демон". Она просто добавлена в rc.local.

kgofhedgehogs13:05:06

supervisor это что и где? В кложуре?

kgofhedgehogs13:05:13

А средствами кложур можно как-нибудь? Вдруг я буду на винде запускать

kgofhedgehogs20:05:30

@ilevd то, что мне нужно. Спасибо

misha15:05:42

а перехачить с принтов на логи - не?

misha15:05:25

можно еще явно *out* перебиндить на файл аутпут стрим (о, это как раз то, что по ссылке выше)

ilevd16:05:13

А тут недавно про плагин kibit говорили, кто еще знает какие-нибудь полезные плагины? Которые в любой проект можно. Я в эту группу lein-ancient могу добавить только

kronos_vano16:05:35

у меня так:

- lein bikeshed -m 100
    - lein cljfmt check
    - lein eastwood
    - lein kibit src

rmuslimov16:05:32

https://github.com/candid82/joker Вот это хорошая штука в качестве линтера

mike_ananev18:05:09

@kgofhedgehogs чтобы сделать clojure приложение, запускаемым как сервис я делаю так: 1. в project.clj в dependencies [commons-daemon/commons-daemon "1.0.15"] 2. в файле, где функция -main надо (:gen-class :implements [org.apache.commons.daemon.Daemon]) 3. в файле, где функция -main надо (:import [org.apache.commons.daemon Daemon DaemonContext]) 4. в файле, где функция -main помещаю 3 простые функции (обязательно с такими именами) (defn -init "init phase of apache daemon" [this ^DaemonContext context] (let [context-arguments (.getArguments context)])) (defn -start "start phase of apache daemon" [this] @(future (start-app)) (Thread/sleep 1000)) (defn -stop "stop phase of apache daemon" [this] (stop-app))

mike_ananev18:05:55

соответственно (start-app) и (stop-app) это уже мои функции, точки входа и выхода в приложение

mike_ananev18:05:59

далее в ОС надо поставить jsvc сервис. в разных ОС это делается по-разному, но делается везде.

mike_ananev18:05:19

Пример запуска приложения: jsvc -server -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:+AggressiveOpts -XX:+UseCompressedOops -Xms256m -Xmx1024m -cwd ./ -java-home "/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/home" -cp "/Users/mike/IdeaProjects/app/target/app.jar" -user mike -pidfile jsvc.pid -outfile '&1' -Duser.dir=/Users/mike/IdeaProjects/app.core

mike_ananev18:05:52

тут можно поиграть с вводом и выводом, на винде тоже будет работать

andmed22:05:33

@kgofhedgehogs в порядке foolproof: что за инит система? Если systemd то rc.local ей (сурпрайз-сурпрайз) может быть глубоко фиолетов. А старт и перенаправление вывода я оставил бы системе. С этим и windows справится

andmed22:05:28

@nicola ты кажется питерюнайтед как-то связан? Захотел вот нагрянуть в Питер. Как думаешь, майский юнайтед норм будет повод?