システムが起動するたびに実行されるように、Linuxの起動にアプリケーション/スクリプトを追加する方法はありますか?
自動化された方法を探しています。つまり、ユーザーはクローン操作や同様の方法で追加しないでください。
答え1
答え2
Xorgが自動的に起動します。
システムレベルの起動スクリプトに加えて、デスクトップ環境にはプログラムを自動的に実行する独自の方法があります。このフォルダは、.config/autostart
自動実行エントリを定義するデスクトップに依存しない方法である必要があります。/etc/xdg/autostart
システム全体の構成の場合。仕様の詳細については、以下をご覧ください。http://developer.gnome.org/autostart-spec/。
LXDE自動起動項目はでも使用できます~/.config/lxsession/LXDE/autostart
。
スクリプトを実行する必要がある場合は、状況が若干異なります。後ろにネットワークが稼働中です。この場合、ネットワーク管理者が定義できる特別な接続後スクリプトがあることを確認する必要があります。両方ネットワーク管理者そして世界文化センター接続後に自動的に実行される項目を指定する独自の方法があります。ネットワークを構成している場合は、このフォルダifupdown
にポストスクリプトを配置できます。/etc/network/if-up.d/
ただし、接続後にスクリプトを実行するより良い方法は、おそらくシステム化されています(これをサポートするシステムの場合、最も近代的なディストリビューションです)。
システムサービスによる自動起動
デスクトップを必要としないグラフィックアプリケーションを自動起動するには、xorgまたは現在のデスクトップ環境で提供されている自動起動ツールを使用しないことをお勧めします。
systemd
これは多くの最新のディストリビューションで広く使用されており、サービスの起動と実行方法に多くの制御と柔軟性を提供します。
いくつかの利点を要約します(systemdはより多くのことをすることができます):
- rootまたは特定のユーザーとして実行:例:
User=myuser
- 設定可能なタイムアウトを使用して、失敗した場合にサービスを再起動します。
Restart=on-failure|on-watchdog|on-abnormal|always
- サービスタイプの設定:
Type=simple|forking|oneshot|notify|dbus
- 開始前提条件と依存関係を設定します。つまり、ネットワークの起動後にサービスを開始するように設定できます(
Wants=network-online.target
リソース[Unit]
セクションで)。
telegram-cliデーモンのサンプルサービスを開始します。に入れてください/etc/systemd/system/tg.service
。
[Unit]
Description=MyDaemon
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/bin/telegram-cli -k /etc/telegram-cli/tg-server.pub -W -P 1234 -d -vvvRC
ExecStop=/usr/bin/pkill -f telegram-cli
User=jicu
[Install]
WantedBy=multi-user.target
これで、サービスが自動的に起動するように有効にできます。
sudo systemctl enable tg
サービスを開始します。
sudo systemctl start tg
サービスの中断:
sudo systemctl stop tg
ヘルスチェック:
systemctl status tg
サービスを無効にします。
sudo systemctl disable tg
追加の入力時間を節約するには、この行を追加してから上記の~/.bashrc
コマンドalias sc='sudo systemctl $*'
をsc start tg
次のように短縮できます。
注:これを試したことがある場合は、
cron
crontabエントリが限られた環境で動作することがわかります。同様に適用されますsystemd
。絶対パスは常に使用され、定義された変数については何も仮定されません。スクリプトが依存するすべての変数を明示的に設定します。systemd
〜しないだろうユーザーのと.bashrc
を使用してください$PATH
。
追加情報:
答え3
rc.local
はい、または/etc
ディレクトリ/etc/rc.d
内の実行可能ファイルへのパスを定義して、Linuxで起動時にプログラムを実行できます。例:
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
/path/to/executable
注:ファイルの資料に記載されているように実行権限を割り当てることを忘れないでください。Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure that this script will be executed during boot.
答え4
各ディストリビューションは独自のブート技術を使用しているため、ディストリビューションのドキュメントを確認してください。 /etc/rc.localはいくつかの自動化スクリプトを置くことができる場所ですが、実際には古いです。今日、ほとんどのLinuxベースのシステムは実行レベルまたはシステムブートを使用しているため、自動的に開始されるほとんどのタスクを細分化できます。