新しい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
ファイルの完全なコンテンツを追加
最も簡単な解決策は、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を使用するシステムで動作します。
以下のコメントによると、より簡単な方法を使用することです:
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
に、作成されたすべてのディレクトリの名前を出力するように指示します。