[Это непосредственно не решает проблему systemd-tmpfiles, но я думаю, что Вы уже распознали, что в данном случае Вы более обеспечены просто эхо использования.]
Сначала "multi-user.target" может или не может быть тем, что Вы хотите использовать. Если Вы знакомы с понятием runlevels от материала init стиля SysV, многопользовательский systemd эквивалент runlevel 3, который является многопользовательской системой, которая загружается к консоли, не GUI. Эквивалент runlevel 5, который загружается к X, является graphical.target. Значение по умолчанию определяется символьной ссылкой в /etc/systemd/system
(и/или /lib/systemd/system
; тот в /etc
отвергнет тот в /lib
) названный default.target, используйте ls для нахождения, где он указывает:
»ls -l /etc/systemd/system/default.target
default.target -> /usr/lib/systemd/system/multi-user.target
Для нормальных рабочих столов Linux это будет graphical.target. Это на самом деле не важно, если Вы хотите сервис начальной загрузки, Вы создаете для запуска независимо от того, что значение по умолчанию runlevel/target - в этом случае, мы можем просто использовать default.target и не взволновать то, для чего это является псевдоним. Если Вы будете использовать многопользовательский, однако, и Ваше значение по умолчанию является графическим, то Вашего сервиса не произойдет.
В зависимости от сервиса могут быть более соответствующие и определенные цели или сервисы, относительно которых Вы хотите запустить этого. На основе Вашего другого вопроса default.target прекрасен, вероятно. Как примечание, различие между "целью" и "сервисом" то, что сервис содержит a [Service]
раздел, который на самом деле выполняет процесс; цель является просто способом собрать в группу сервисы через различное, "зависит" и "требует" директив; это не делает ничего собственного вне инициирования других целей или сервисов.
Когда сервис, запуски определяются тем, что другие сервисы явно зависят от него. В случае простого, автономного события как это, что мы хотим выполненный поздно в процессе начальной загрузки, мы можем использовать эту комбинацию директив:
[Unit]
After=default.target
[Install]
WantedBy=default.target
Раздел "Install" используется, когда сервис установлен; "WantedBy" указывает цель, с которой мы хотим, чтобы этот сервис был включен (значение, что это будет работать, если та цель сделает, но nb., который это не определяет, когда это будет работать относительно других). Так как мы на самом деле хотим, чтобы этот сервис работал позже, а не раньше, мы затем указываем "После" пункта. Это не должно на самом деле совпадать с целью WantedBy (это обычно не), и может быть полностью опущен, если Вы не заботитесь, когда это происходит; я просто использую его на догадке, что большая часть другого материала будет выполнена относительно материала, который где-нибудь объединяется в цепочку к чему-то, что указало Before=default.target
(который мы, возможно, также использовали; цель хочет, оцениваются, прежде чем цель выполняется).
Для примера я просто повторю "привет мир" к консоли. Сам сервис описан в [Service]
раздел:
[Service]
Type=forking
ExecStart=/usr/local/bin/helloworld
Для команды нужен полный путь. Причина я не просто использовал /usr/bin/echo "hello world"
это, это не будет работать (вывод переходит к/dev/null, я думаю), и в то время как сервис, который делает echo "hello world" > /dev/console
будет, экспериментирование продемонстрировать, что использование перенаправления оболочки в директиве ExecStart не будет. Таким образом,/usr/local/bin/helloworld является сценарием оболочки с той одной строкой, echo "hello world" > /dev/console
.
Отметьте Type=forking
, который необходим для сценария оболочки.
Наш полный, минимальный сервисный файл является просто теми тремя разделами ([Unit]
, [Service]
, и [Install]
). Для установки поместите файл или символьную ссылку на него или в/etc/systemd/system или в/usr/lib/systemd/system, и:
systemctl --system enable helloworld
Это должно распечатать ln -s ...
. Это не выполняет сервис, он просто настраивает его для выполнения при начальной загрузке, как обсуждено выше.
Вот именно вкратце. man systemd.unit
и man systemd.service
имейте больше деталей.
-T
и --message
переключитесь означают это who
отобразит a +
, -
, или ?
обозначение, позволяет ли пользователь сообщениям быть записанными в свой терминал.
`--writable'
After each login name print a character indicating the user's
message status:
`+' allowing `write' messages
`-' disallowing `write' messages
`?' cannot find terminal device
$ who --message
saml - tty1 2013-11-03 16:09 (:0)
saml + pts/0 2013-11-03 16:10 (:0.0)
saml + pts/1 2013-11-03 16:49 (:0.0)
saml + pts/6 2013-11-04 12:28 (:0.0)
saml + pts/20 2013-11-05 13:16 (:0.0)
saml + pts/43 2013-11-05 16:58 (:0.0)
-T
переключатель делает то же самое.
Сообщения являются средством в Unix, где люди могут записать сообщения непосредственно в чужое оконечное устройство.
$ write
usage: write user [tty]
saml на tty1
имеет его сообщение, получают отключенную возможность (-
).
$ write saml tty1
write: saml has messages disabled on tty1
Однако пользователь saml позволяет сообщения на pts/0
:
$ write saml pts/0
hola
Если я переключаюсь на вкладку, которая соответствует pts/0
:
[saml@grinchy ~]$
Message from saml@grinchy on pts/43 at 17:06 ...
hola
Можно использовать команду mesg
включить и отключить эту опцию в данном терминале.
Сообщения включены.
$ who --message | grep "pts/0"
saml + pts/0 2013-11-03 16:10 (:0.0)
Выключите его.
$ mesg n
Теперь это отключено.
$ who --message | grep "pts/0"
saml - pts/0 2013-11-03 16:10 (:0.0)
mesg
иwrite
поместите пчелу в шляпу здесь :) потрясающий ответ с неожиданным … – erch 07.11.2013, 02:19