ユーザーのログイン後にsystemdサービスを開始し、ユーザーのログアウト前に停止する方法


10

Fedora 23マシンを持っています。

ローカル/ホームディレクトリを(NASマシンの)リモートディレクトリに同期するディレクトリ/ファイル同期bashスクリプトがあります。手動で実行しますが、systemdサービスを作成してより柔軟にしたいと思います。他の人が自分のユーザー資格情報で自分のPCを使用するため、ユーザーがいつログインしてサービスを開始したかを知りたいのですが。

サービスのsystemdファイルからできることはありますか、それともスクリプトのコードから確認する必要がありますか?

環境変数($ USERなど)にアクセスできることを確認し、それをサービスとして実行するだけです。

私の主なドキュメントソースはこのリンクですhttps://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Unit_Files.html


systemctl --userF23に仕事を?
user1686 2016

たぶん、リストとメッセージを返します76 loaded units listed
GeorgeKaf、2016

これはあなたのために働くかもしれない別のアプローチです:unix.stackexchange.com/a/109270/111707あなた.bashrcがログイン時に起動する小さなPythonスクリプトを書いてください、そしてそれはそれからGnomeログアウトシグナルを聞き、そしてそれ自身をシャットダウンします。
IanB 2017年

@IanBありがとう、私はそれをテストします。そのようなものを持っていることは決して害にはなりません。
GeorgeKaf

回答:


15

systemdを使用すると、ユーザーセッションのサポートがすでに含まれています。実際、(無意識のうちに)それに依存しているはずです。

サービスディレクトリを作成する

mkdir -p $HOME/.local/share/systemd/user

サービスファイル(vim、gedit、geany-何でも好きなもの)を作成して編集します。

vim $HOME/.local/share/systemd/user/my.service

永続的なサービスであれば、おおよそこのようになります。

[Unit]
Description=My very own Service
[Service]
Type=simple
TimeoutStartSec=0
ExecStart=/path/to/start/script arguments
[Install]
WantedBy=default.target

しかし、一度トリガーしてからそれを使いたいと思うので、次のようなワンショット構成を使用します。

[Service]
Type=oneshot
RemainAfterExit=true
StandardOutput=journal
ExecStart=/path/to/start/script arguments
ExecStop=/path/to/stop/script arguments
[Install]
WantedBy=default.target

もちろん、これはスクリプトが実行可能であることを前提としています。

chmod a+x /path/to/start/script
chmod a+x /path/to/stop/script

そうでない場合は、それぞれのインタープリターへのパスを付加する必要があります。

ExecStart=/bin/bash /path/to/start/script arguments

systemdをリロードします(テストのために再ログインします)。

systemctl --user enable my.service # enables the service
systemctl --user # should display your new unit in the list
journalctl --user should show the log

さらに情報が必要な場合は、たとえばArch-Wikiを参照してください。 このアスクブントゥスレッドには、偶然にも私のアイデアを含め、さまざまなアイデアがあります。

サービスをグローバルに定義することにより、(rootの場合)動作を他のユーザーに拡張できます。これを行うには、$ HOME / .local / share / systemd / userではなく/ usr / share / systemd / user /にサービスファイルを作成する必要があります


1
こんにちは、答えは良かったです。ただし、サービスが最初のログイン時に開始され、最後のユーザーセッションで停止される場合にのみ機能します。
アンワル

4
サービスを有効にするには、-userフラグが必要です。"systemctl --user enable my.service"
blushrt 2018年

0

私はこれを数年前に知っていますが、anxからの回答が私を助けてくれました。だから、私はそれがまだ関連があると思います。また、これはコメントですが、私にはその権限がないので「回答」として投稿します。いずれにせよ...

Linux Mint 19を実行していて、スクリプトが「$ HOME / .local / share / systemd / user」にある場合、サービスを「有効」にすることができませんでした。そうしようとすると、常にエラーが発生しました。ただし、「$ HOME / .local / share / systemd / user」ディレクトリから問題なく起動できます。スクリプトを「/ usr / share / systemd / user /」に移動した後、systemdで問題なくスクリプトを有効にできました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.