LoginSignup
7
8

More than 3 years have passed since last update.

Linux版dropboxをsystemdでサービスとして起動する

Last updated at Posted at 2018-02-07

注意

Dropboxクライアントの仕様変更により、CentOS7で本稿の方法ではCentOS7でDropboxクライアントを実行できなくなりました。あらためて対応方法を「Docker版DropboxクライアントをCentOS7サーバで動作させる」で紹介したので、ご覧ください。

はじめに

CentOS7サーバにLinux版のDropboxクライアントをインストールし、systemd管理下でサービス起動させてみた。

通常、Dropboxクライアントは特定ユーザの権限で動かすものなので、systemdのユニットテンプレートを使用してマルチユーザに対応して動くようにした。

インストール

まず、以下のサイトの「コマンド ラインを使った Dropbox のヘッドレス インストール」を参照して、ヘッドレス版のDropboxクライアントをインストールする。(インストール方法は他のサイトでも紹介されているので割愛)

また、このサイトからコマンドライン版のdropbox管理スクリプト(dropbox.py)をダウンロードする。これを。~/bin/dropbox.pyに配置していると仮定する。

ここまでで、以下のコマンドでDropboxクライアントが起動/終了できるようになる。

~/bin/dropbox.py start
~/bin/dropbox.py stop

ユニットファイルの作成

Dropboxクライアントをsystemdで管理できるようにユニットファイルを作成する。

以下の内容を /etc/systemd/system/dropbox@.service として作成する。ファイル名に含まれる@は、このユニットがテンプレートであることを示す。テンプレートユニットは、実行時に複数のインスタンスを起動できるようにするもので、ユニットファイルをうまく作れば、パラメータを初めとする実行条件をインスタンス毎に切り替えることができる。この機能は、従来のSysV initに存在しない、systemd の利点の1つだ。

/etc/systemd/system/dropbox@.service
[Unit]
Description=Dropbox client (user: %i)
After=syslog.target network.target

[Service]
ExecStart=/bin/bash -c "sudo -u '%i' /home/%i/bin/dropbox.py start"
ExecStop=/bin/bash -c "sudo -u '%i' /home/%i/bin/dropbox.py stop"
Restart=no
Type=forking

[Install]
WantedBy=multi-user.target

上記のファイルを作成したら、systemctl daemon-reloadで反映しておく。

実行

systemctl start dropbox@ユーザ名

たとえば、Dropboxクライアントをインストールしたユーザがaliceならば、以下のようにして実行する。

systemctl start dropbox@alice

もちろん、enable サブコマンドで自動起動も可能。

systemctl enable dropbox@alice

解説編

systemdのテンプレートユニットでは、@以降がインスタンス名として扱われるので、これを実行ユーザ名として扱えばよい。ユニットファイルの中では%i識別子で参照できる。(man systemd.unitを参照)

単純に考えると以下のように記述すれば良さそうだが、コマンド名の部分で%iは展開されないため、このままでは実行できない。

ExecStart=/home/%i/bin/dropbox.py start

そこで、以下のようにbashから起動し、かつ、sudoコマンドで実行ユーザを指定すればうまく展開させることができる。

ExecStart=/bin/bash -c "sudo -u '%i' /home/%i/bin/dropbox.py start"
7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8