Bug 28775

Summary: нельзя использовать oneshot в .service-файле
Product: Sisyphus Reporter: serpiph <serpiph>
Component: anacronAssignee: placeholder <placeholder>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: glebfm, ldv, legion, placeholder
Version: unstable   
Hardware: all   
OS: Linux   

Description serpiph 2013-04-01 12:16:22 MSK
Использовать Type=oneshot в .service-файле нельзя, так как при запуске сервиса systemd будет ждать 15 минут, пока anacron не отработает свои скрипты (так как таймаут отключён). Хоть при запуске при старте, хоть при запуске из консоли. Надо делать Type=simple, чтобы запуск сервиса не держал консоль непонятно сколько времени.
Comment 1 Repository Robot 2013-04-01 14:23:02 MSK
anacron-1:2.3-alt5 -> sisyphus:

* Mon Apr 01 2013 Dmitry V. Levin <ldv@altlinux> 1:2.3-alt5
- anacron.service: changed service type to simple (closes: #28775).
Comment 2 serpiph 2013-04-01 15:37:05 MSK
Я думал, что нашёл всё.

Похоже, надо добавить ещё эти параметры:

[Service]
StandardInput=null
StandardOutput=journal
StandardError=journal

В противном случае сервис ждёт старта 90 с и по таймауту отваливается. По крайней мере, с ними сервис сразу стал активным и ушёл в фон.
Comment 3 Dmitry V. Levin 2013-04-01 16:20:17 MSK
Не понимаю, зачем StandardOutput и StandardError, разве они по умолчанию не syslog?
Comment 4 Repository Robot 2013-04-01 16:35:32 MSK
anacron-1:2.3-alt6 -> sisyphus:

* Mon Apr 01 2013 Dmitry V. Levin <ldv@altlinux> 1:2.3-alt6
- anacron.service: redirect standard descriptors (closes: #28775).
Comment 5 serpiph 2013-04-01 16:39:06 MSK
Я попытался найти причину неотключения от консоли. По-умолчанию (если верить man systemd.exec) стандартный вход - это null, стандартный вывод - это journal, стандартный вывод ошибок - это inherit (то есть journal). То есть придраться, вроде, не к чему.

Вот из /etc/systemd/system.conf:

[Manager]
...
#DefaultStandardOutput=journal
#DefaultStandardError=inherit

Но только после явного указания, что и куда идёт, всё заработало. В /etc/systemd/journald.conf я раскомментировал такую строку:
[Journal]
...
ForwardToSyslog=yes

То есть syslog и так получает от journald всю информацию.

Я тогда специально прописал все вводы/выводы и у меня заработало именно так, как мне надо. Где косяк - в systemd ли, в доках ли на systemd - понять сходу не могу, надо ковырять исходные тексты.