Ubuntu Server 17.10コンピュータで起動時にスクリプトを実行する方法は? 17.10でメソッドが変更されたようです。
答え1
スクリプトを適切なユーザーcron
テーブル(例:予約されたこと)のスケジュールはです@reboot
。
ユーザーはを使用してcron
テーブルを編集できますcrontab -e
。
起動時に実行される例/path/to/script.sh
:
@reboot /path/to/script.sh
rootとして実行する必要がある場合は、rootの編集にcrontab@reboot sudo /path/to/script.sh
を使用しないでください。sudo crontab -eu root
また見なさい:スケジュールされたタスク(1)、スケジュールされたタスク(8)、スケジュールされたタスク(8)
答え2
Ubuntu 15.04以降では、デフォルトではsystemd
サービスとプロセスを自動的に開始するプログラム(一種)であるというプログラムが使用されます。わずかな労力で独自のサービスを作成し、スタートアップサービスリストに追加できます。
基本システムサービス
以下は、Python GUIサーバーの起動に使用するベアボーン.service
ファイルです(シェルスクリプトかもしれませんが、重要ではありません)。
[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
。
基本手順
または、目的のエディタを使用して起動時に実行するスクリプトを作成します
nano
。#!/bin/bash
ファイルの先頭に正しいshebang(bashスクリプト用)が含まれていますchmod
。my_service.serviceというファイルにサービスを作成し、正しいディレクトリにコピーするだけです
cp my_service.service /lib/systemd/system/
。サービスの開始:
sudo systemctl start my_service.service
サービスに実行するように指示したすべてのスクリプトが開始されます。起動の代わりに同じコマンド「停止」を使用して終了します。起動プロセスにサービスを追加します
sudo systemctl enable my_service.service
。これを削除するには、同じコマンドで「enable」を「disable」に置き換えます。
それだけです!これはsystemdサービスのデフォルト設定なので、スクリプトがroot権限で自動的に実行されることに注意してください。
私の簡単な例(完了)
参考までに、Dashを使用して単純なPython GUIサーバーを起動する簡単なシステムサービスを次に示します。
[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が提供し、このAskUbuntuスレッドsystemdを学ぶのに役立つ素晴らしい答えです。役に立ったことを願っています!