私のバックアップスクリプトは手動で実行すると正常に動作しますが、crontabは何も実行しません。私はFedora 35ワークステーションを実行しています。
crontabエディタの仕組み:
$ crontab -e
cronデーモンが実行されていません。次のコマンドはそれぞれ出力を生成しません。
$ pgrep cron
$ pgrep crond
$ pidof cron
$ pidof crond
cronを起動しようとしています。
$ whereis cron
cron: /usr/share/man/man8/cron.8.gz
$ whereis crond
crond: /usr/sbin/crond /usr/share/man/man8/crond.8.gz
$ sudo service cron start
Redirecting to /bin/systemctl start cron.service
Failed to start cron.service: Unit cron.service not found.
$ sudo systemctl start cron
Failed to start cron.service: Unit cron.service not found.
cronの代わりにcronieを使ってみました。
$ sudo dnf install cronie
Package cronie-1.5.7-3.fc35.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
$ sudo systemctl enable cronie.service
Failed to enable unit: Unit file cronie.service does not exist.
$ sudo systemctl start cronie.service
Failed to start cronie.service: Unit cronie.service not found.
さらに、anacron("cronie.service")は、以前にインストールされている場合はFedoraシステムのアップグレード後も維持されますが、驚くべきことに、新しくインストールした場合、少なくともFedora Server 35にはインストールされません。
答え1
このコマンドを使用する場合:
# systemctl start crond.service
これにより、システムは再起動後もその情報を保持します。したがって、これを行うことを覚えておく必要はありません!
また、ステータスを確認するには、以下を使用してください。
# systemctl status crond.service
最後に、#はもちろんルートアカウントを意味するので、適切にsudoを使用したり使用したりしないでください。
答え2
Cronはajgringo619によって公開されたcrondの場所を使用してバックアップスクリプトを実行しました。
$ ls -l /usr/sbin/crond
-rwxr-xr-x. 1 root root 74448 Jul 21 15:05 /usr/sbin/crond
$ sudo /usr/sbin/crond start
$ pgrep cron
121692
答え3
スクリプトは、相対パスおよび/またはシェル環境コンテキストを使用してリソースを使用/呼び出しできます。
Cronはシェルと環境のコンテキストなしでスクリプトを実行します。
次のユーザーとしてスクリプトを実行してみてくださいnobody
。
sudo -u nobody <your-scirpt-full-path>
ユーザーと一緒にスクリプトを実行するnobody
とcron
。
bash
現在のシェル環境コンテキストをスクリプトに挿入する一般的な技術:
sed -i "2i source $HOME/.bash_script" <your-scirpt-full-path>
答え4
Ubuntuでは、次のコマンドを使用してください
sudo service cron start