次のシステム単位ファイルがあります/etc/systemd/system/emacs.service
。
[Unit]
Description=Emacs: the extensible, self-documenting text editor
Documentatin=man:emacs(1) info:Emacs
[Service]
Type=forking
ExecStart=/usr/bin/emacs --daemon
ExecStop=/usr/bin/emacsclient --eval "(progn (setq kill-emacs-hook nil) (kill-emacs))"
Restart=always
Environment=DISPLAY=:%i
TimeoutStartSec=0
[Install]
WantedBy=default.target
起動時に起動したいので、次のように入力しました。systemctl enable emacs
ただし、サービスが再起動されるたびに、次のものsystemctl status emacs
が表示されます。
● emacs.service - Emacs: the extensible, self-documenting text editor
Loaded: loaded (/etc/systemd/system/emacs.service; disabled; vendor preset: enabled)
Active: inactive (dead)
ただし、systemctl start emacs
ステータスを入力して確認すると、次のものが返されます。
● emacs.service - Emacs: the extensible, self-documenting text editor
Loaded: loaded (/etc/systemd/system/emacs.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2016-11-11 23:03:59 UTC; 4s ago
Process: 3151 ExecStart=/usr/bin/emacs --daemon (code=exited, status=0/SUCCESS)
Main PID: 3154 (emacs)
Tasks: 2
Memory: 7.6M
CPU: 53ms
CGroup: /system.slice/emacs.service
└─3154 /usr/bin/emacs --daemon
起動時にこのプロセスを正常に開始するにはどうすればよいですか?
答え1
理由はわかりませんが、正しく機能させるには、次の手順を実行します。
削除済みEnvironment=DISPLAY=:%i
User=
変数を追加しました
正しいファイルがあることを確認してください/etc/systemd/system/emacs.service
(ハードリンクの前)。
そして再実行systemctl enable emacs
これはうまくいきます。
編集する
ここで本当の問題は、3行にタイプミスがあるということです。
Documentatin
を確認しながら知りましたjournalctl
。 stderrにエラーが送信されないため、systemdスクリプトに問題がある人なら誰でも同じことをお勧めします。
答え2
DISPLAY 環境変数があります。これはX11を起動することを意味します。したがって、それまではサービスをブロックする方法が必要です。
これは以下を使用して行われます。After=...
オプション。
私は自分でやったことがないので効果があるとは言えませんがgraphical.target
。
[Unit]
After=graphical.target
もう1つの可能性は、Xサーバーがすぐに起動しない場合(たとえば、lightdmなどのログイン画面がある場合)、次のものを使用する必要があるかもしれません。WantedBy=...
代わりに:
[Unit]
WantedBy=graphical.target
systemdで作業するのに疲れた場合は、X-Windows管理者が作業を実行する一般的な方法を見たいと思うかもしれません。
~/.xprofile
ファイルのように動作するファイルがあります~/.bashrc
。
文書もあります~/.config/autostart/*.desktop
。定義されたすべてのアプリケーションが自動的に起動します。
ただし、これらのソリューションはシステム全体には適用されず、複数のユーザーがいる場合は、各ユーザーに独自のエントリが必要です。また、アプリケーションをrootとして起動せずに、ユーザーとしてアプリケーションを起動します。
ちなみに、「loaded + inactive(dead)」メッセージは、systemdがプロセスを開始するのに苦労したことを意味するために決定されました。あきらめるそれ。name.service
次のコマンドを使用して、再起動後に機能していることを手動でテストできます。
systemctl stop <service-name>
systemctl start <service-name>
これは更新する情報が正しいと仮定すると、ステータスとサービスが正しく開始されます。その後、ステータスを再確認して追加の詳細を確認できます。
systemctl status <service-name>
答え3
サービスを有効にしたら、リンクがどこにあるかを確認してください。これについて私の考えを追加するだけです。実行するとsudo systemctl enable myserevice.service
フォルダにリンクが作成されますが、multi-user.target.wants
実際のリンクには作成されませんmulti-user.target.wants
。同じ名前の新しいフォルダに作成されます。WantedBy=multi-user.target
私のテキストエディタにはいくつかの追加文字が表示されません。だから私はそれが何であるかわかりません。別の.serviceファイルでc / pを使用して再度有効にしましたが、リンクは正しいフォルダにあります。
答え4
これは複数のDebianサービスファイルのバグです:
# systemctl enable watchdog
Synchronizing state of watchdog.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable watchdog
# find /etc/systemd/ | grep watch
# tail -n2 /lib/systemd/system/watchdog.service
[Install]
https://www.raspberrypi.org/forums/viewtopic.php?f=82&t=218609&p=1406567#p1406567 https://forum.armbian.com/topic/9115-still-dont-know-where-to-report-bugs-watchdogservice-refuses-to-start-due-to-broken-service-file/
展開レベルの変更は次のとおりです。
echo "WantedBy=default.target" >> /lib/systemd/system/watchdog.service
systemctl daemon-reexec
systemctl enable watchdog
systemctl stop watchdog.service
systemctl start watchdog.service
手動で置き換える方法はたくさんあります。