web-dev-qa-db-ja.com

なぜbashスクリプトがcronで動作しないのですか?

Ubuntuサーバーを自動的に更新するbashスクリプトを作成しました。スクリプトは次のとおりです。

#!/bin/bash

apt-get update
apt-get upgrade
echo "Update am $(date "+%d. %m. %y|%H:%M:%S) >> /var/log/update.log
exit 0

ログファイルは常に空です。 crontab:

0 3 * * * /drives/files/scripts/update.sh

Ubuntu Serverが設定で自動的に更新されることは設定できますが、これはcronと少しのスクリプトについて学習することです。

ありがとう

4
ssd_rider

私はあなたがcrontabを通常のユーザーで使用していると思います。つまり、彼はSudoを提供せずにシステムを更新/アップグレードすることはできません。

また、apt-get updateおよびapt-get upgradeはユーザーに確認を求めるため、事前にこの確認に合格する必要があります。

yes | apt-get update
yes | apt-get upgrade

そのため、Sudoを使用してコマンドを実行する必要がありますが、これにより、Sudoにパスワードを提供する方法が問題になります。

さらに

echo  "Update am "$(date "+%Y-%m-%d %H:%M:%S") >> /var/log/update.log

/ var/log/...に書き込んでいます。これは、通常のユーザーにはないアクセス許可を行う必要があることを意味します。

これを解決するには、ルートcronでスクリプトを実行する必要があります。

Sudo crontab -e

デフォルトのエディターでルートcronファイルを開きます。

スクリプトのエントリを追加します

0 3 * * * /drives/files/scripts/update.sh

ここで保存して終了します。

[〜#〜] ps [〜#〜]:念のため、スクリプトの実行許可を必ず与えてください。それを行うには、次のコマンドを実行します。

chmod +x /path-to-script
1
Maythux

なぜ機能しないのですか?

apt-get updateおよびapt-get upgradeを実行するには、Sudoユーザーになる必要があります。つまり、スクリプトはSudo特権で実行する必要があります。

その他の停止?

はい、あなたは-yを与えていないので、更新後にアップグレードコマンドが自動的にダウンロードされます。

それは主要なことですか?

はい、コマンドとともに-yを渡さない場合、cronは停止し、「-y」引数を探し、「-y」を取得するまで実行されません。

rootユーザーとしてcronスクリプトを実行する方法?

Sudo crontab -e

エディターを選択してnanoを選択してから、行を追加するように求められます。しかし、完全なスクリプトはこれでなければなりません

apt-get update
apt-get upgrade -y
apt-get dist-upgrade -y

お役に立てば幸いです。

0
rɑːdʒɑ