Ubuntu Server 17.10の起動時にスクリプトを実行するにはどうすればよいですか?


13

Ubuntu Server 17.10マシンで起動時にスクリプトを実行するにはどうすればよいですか?方法は17.10で変更されたと思います。

回答:


14

スケジュールを設定して、適切なユーザーのcronテーブル(つまりcrontab)にスクリプトを配置します@reboot

ユーザーはでcron表を編集できますcrontab -e

/path/to/script.sh起動時に実行される例:

@reboot /path/to/script.sh

ルートとして実行する必要がある場合は、使用しないでください@reboot sudo /path/to/script.sh。ルートのcrontabを編集
するsudo crontab -eu rootために使用します。

参照: crontab(1)、cron(8)、crontab(8)


2

Ubuntu 15.04 systemd以降では、デフォルトでスタートアップサービスと手順を自動化する(ある種の)プログラムと呼ばれるものを使用します。独自のサービスを作成し、ほんの少しの努力でスタートアップサービスのリストに追加できます。

基本的なシステムサービス

これは.service、python guiサーバーの起動に使用できるベアボーンファイルです(シェルスクリプトである可能性がありますが、重要ではありません)。

[Unit]
Description=Python GUI Server

[Service]
ExecStart=/home/pi/software/GUI_POE.py &

[Install]
WantedBy=multi-user.target

Descriptionオプションサービスがあるか、何を説明した任意の文字列です。

このExecStartオプションは、実行するコマンドを指定します。ここでは、実行可能なpythonスクリプトへのパスを指定し、&トークンを使用してバックグラウンドで実行します。

このWantedByオプションは、このサービスを使用するターゲットに基づいて優先順位を指定します。特定の時間にサービスを実行する必要がない場合は、に設定するだけmulti-user.targetです。

基本手順

  1. nanoまたは、選択した任意のエディターを使用して、起動時に実行するスクリプトを作成します。ファイルの最上部に適切なシェバンを含めて(#!/bin/bashbashスクリプト用)、必ず実行可能なアクセス許可を付与してくださいchmod

  2. my_service.serviceという名前のファイルにサービスを記述し、を使用して適切なディレクトリにコピーしcp my_service.service /lib/systemd/system/ます。

  3. サービスを開始しますsudo systemctl start my_service.service。これにより、サービスに実行するように指示したスクリプトが起動されます。startの代わりに「stop」を使用した同じコマンドは、それをオフにします。

  4. スタートアッププロセスにサービスを追加しますsudo systemctl enable my_service.service。削除するには、同じコマンドで「enable」を「disable」に置き換えるだけです。

以上です!systemdサービスではデフォルトであるため、スクリプトはroot権限で自動的に実行されることに注意してください。

私の簡単な例(フル)

参考までに、Dashを使用して簡単なPython GUIサーバーを起動する簡単なsystemdサービスを次に示します。

[Unit]
Description=Python GUI Server
After=network-online.target

[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi

[Install]
WantedBy=multi-user.target

このサービス例ではPython3スクリプトを使用していますが、式はシェルスクリプトの場合とまったく同じです。

詳細については、DigitalOceanによるこの優れたチュートリアルと、systemdの学習に役立った優れた回答を含むこのAskUbuntuスレッドを参照してください。お役に立てれば!


2
この質問にシステム化された視点をもたらしてくれてありがとう!ExecStart行でバックグラウンド化を強制する必要は本当にないことを指摘します。
ジェフシャラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.