web-dev-qa-db-ja.com

システム起動時の起動スクリプト(Ubuntu 16.04.1)

新しいUbuntuシステムでは、システムの起動時にBashスクリプトを自動的に開始しようとしました。

私は多くの投稿とそれに関するハウツーを見つけました。だから私はクロンタブ経由でそれを作ろうとしました:

  • crontab -eを実行します
  • @reboot /cronjobs/demo.sh >> /cronjobs/cronLogs/demo.outputを追加
  • Sudo chmod +x /cronjobs/demo.shを使用してスクリプトに実行権限を設定します
  • 再起動システム

出力は作成されましたが、スクリプトは実行されません。そこで、rc.localファイルを使用して別のソリューションを試しました。

  • Sudo vi /etc/rc.localを実行します
  • /cronjobs/demo.sh || exit 1を追加しました
  • 再起動システム

しかし、私のスクリプトは実行されません。したがって、再起動するためには、スクリプトは/etc/rc0.d/にある必要があると読みました。だから私はこれを試しました:

  • mv /cronjobs/demo.sh /etc/rc0.d/K99_demo.shでスクリプトを移動します
  • アクセス許可を確認する(すべて問題ないようです)
  • 再起動システム

同じこと-スクリプトは実行されません。

だから、私のエラーは何ですか?スクリプトを実行できないのはなぜですか? ./demo.shでフォルダーに切り替えた後にcd /cronjobsを実行すると、スクリプトを実行できます。このスクリプトは、フォルダーを作成するだけのデモファイルです。

#!/ bin/sh 
 echoデモ出力
 mkdir /cronjobs/demofolder

編集:パスとファイル名を置き換え、demo.shファイルの完全なコンテンツを追加

2
devKyrios

最も簡単な解決策は、Sudo Powersを使用して/etc/cron.d/に次のようなファイルを作成することです。

Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot   root    mkdir /cronjobs
@reboot   root    sleep 10
@reboot   root    mkdir /cronjobs/demofolder

これにより、スクリプトファイルの使用が完全に回避され、ホームディレクトリ名(/ home/steve、/ home/maryなど)に関係なくすべてのユーザーに対して機能します。

編集-sleep 10を追加

何らかの理由で、cronの動作が速すぎるか、ディレクトリの作成時にカーネルの動作が遅すぎる。 2つのmkdir行の間に余分な行sleep 10が必要でした。

2つのmake directoryコマンドの間に10秒は必要ないかもしれませんが、10はSSDを使用するシステムで動作します。

編集2-1つのコマンドで完全なディレクトリパスを作成する

以下のコメントによると、より簡単な方法を使用することです:

Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot   root    mkdir -p -v /cronjobs/demofolder
  • -p(長いバージョン--parents)は、mkdirに、存在しない場合はすべてのディレクトリ親レベルを自動的に作成するように指示します。
  • -v(長いバージョン--verbose)は、mkdirに、作成されたすべてのディレクトリの名前を出力するように指示します。
0