Я просто переключился на 16,04 серверов с 14,04 серверов. С Выскочкой я раньше запускал мой сервер с файла, который я имел в/etc/rcS.d по имени M95. M95 назвал/etc/rc.local. Теперь с systemd я записал файл в/etc/systemd/system, названном my.service. Это похоже на это:
[Unit]
Description=MyService
[Service]
WorkingDirectory=/etc
ExecStart=/bin/sh rc.local
[Install]
WantedBy=multi-user.target
Когда я ввожу "/bin/sh rc.local" в командную строку, мой сервер действительно запускается. Когда я пытаюсь запуститься, сервис путем выполнения "systemctl запускают my.service", ничего не происходит.
Соответствующие строки в journalctl-b:
Started MyService.
eth0 ...(basically the info I see from ifconfig)
root : TTY=unknown ; PWD=/etc ; USER=root ; COMMAND=/etc/rcS.d/M95
pam_unix(sudo:session): session opened for user root by (uid=0)
$File not found:: /new/den-routes
udhcpd already running
pam_unix(sudo:session): session closed for user root
/bin/rm: cannot remove '/var/log/rewriting-net-rules': No such file or directory.
В rc.local это похоже:
#!/bin/sh -e
...
sudo /etc/rcS.d/M95
/bin/rm /var/log/rewriting-net-rules
exit 0
В M95 это запускает udhcpd (который является, куда "udhcpd уже выполняющий" сообщение прибывает из), и в конце запускает сервер путем высказывания:
cd /new
/bin/sh StartServer&
Кажется, что это действительно добирается до M95, потому что сообщения становятся зарегистрированными от него, но сервер не запускается. Когда я петляю в командной строке, она работает, но как сервис она не работает. Я очень незнаком с systemd, таким образом, я понятия не имею, делаю ли я это правильно. В течение недели я читал примеры и учебные руководства для него, но я все еще не уверен, как это работает и как сервисный файл должен быть записан.
Править: Вот мой файл StartServer:
#!/bin/bash
nohup /jre/jdk1.8.0_101/jre/bin/myserver -Xrs -Xmx1000m -jar /new/MyServer.jar nowd &
Это работает очень хорошо, когда я запускаю его с командной строки. Это работает, когда я называю его от my.service. Я вставил некоторый echos, чтобы видеть, что он проходит через целый файл, но myserver и MyServer.jar не запускаются по некоторым причинам.
Оказалось, что проблема была в части кода в rc.local. Строка, что кто-то вставил попытку удалить файл, произвела бы ошибку и заставила бы программу выходить, если бы файл не существовал. Я не уверен, почему это не произвело эту ошибку, когда я выполнил его в командной строке, но, выполнено с помощью сервиса, это мешало всему работать.
я зафиксировал его путем добавления, если оператор, чтобы проверить, существует ли тот файл, прежде чем я попытаюсь удалить его.
Мое совершенство, существует много вещей неправильно здесь.
rc.local
в рабочем каталоге /etc
. Это несмотря на то, что systemd имеет предварительно предоставленную сервисную единицу для выполнения /etc/rc.local
, если Вы действительно хотите. (rc.local
механизм, который был заменен три раза на Ubuntu, сначала van Smoorenburg rc
, затем выскочкой, затем systemd.) /etc/rc.local
не выполняет Ваш сервис также. Вместо этого это вызов sudo
, несмотря на то, что это уже выполнение как суперпользователь. /etc/rcS.d
, несмотря на то, что каталог является фермой символьной ссылки, которая, как предполагается, не содержит фактический rc
файлы сценария. /new
не /etc
. StartServer
. exec
для накладывания себя. &
для выполнения той оболочки асинхронно. exec
для накладывания себя. &
для запущения той программы Java асинхронно. Ни одно из этого не необходимо.
И Вы, кажется, без видимой причины уронили его посреди механизма для сброса MAC-адресов в клонированных виртуальных машинах.
[Unit] Documentation=https://askubuntu.com/a/831314/43344 After=udhcpd.service [Service] WorkingDirectory=/new ExecStart=/jre/jdk1.8.0_101/jre/bin/myserver -Xrs -Xmx1000m -jar /new/MyServer.jar nowd [Install] WantedBy=multi-user.target
существует также ясно After=
дополнение, необходимое для того, что это, это выписывает den-routes
файл что Ваш dæ понедельник ожидает; Вы, однако, не предоставляя информации для определения, каково это.