私はYouTubeのビデオやオンラインコースをフォローし、Linuxのコマンドを学び、スキルを向上させ、より良いものにしようとしています。現在、スケジュールを理解しようとしています。
私のRaspberry Piは、ヘッドレスRaspbianで独自のクラウドを実行しています。週に一度、owncloudをメンテナンスモードに設定し、apt-getアップデート、apt-getアップグレード、owncloudをメンテナンスモードからオフにするようにスケジュールしたいと思います。 Owncloud(php)コマンドはユーザーwww-dataで実行する必要があり、apt-getはrootとして実行する必要があります。これまで私は次のことを試しました。
sudo -u www-data crontab -e
行を追加0 7 * * 1 php /var/www/owncloud/occ maintenance:mode --on
それから
sudo crontab -e
行を追加1 7 * * 1 apt-get update && apt-get upgrade -y
しかし、ここで私は詰まっています。 apt-get Upgrade -yが終了ステータス0を返した後にメンテナンスモードでowncloudを終了するようにシステムに指示するにはどうすればよいですか?ルートのcrontabエントリを次に設定することを検討しました。
1 7 * * 1 apt-get update && apt-get upgrade && php /var/www/owncloud/occ maintenance:mode --off
ただし、Maintenance:mode --offはwww-dataユーザーが実行していないため失敗します。数分後にwww-dataとして実行するように最後のコマンドをスケジュールできますが、apt-get Upgrade -yが終了ステータス0を提供するときに実行することをお勧めします。これを行う方法はありますか?
ベストアンサー1
su
友達と一緒に救いに来てください!su
、、、sudo
およびsuper
すべてここで使用できます。su
伝統的でsudo
最もシンプルで、super
ユーザーがこれらのタスクのいくつかを実行できるようにしたい場合は、利点があります。
apt-get upgrade
終了ステータステストに具体的に言及したので1 7 * * 1 apt-get update && apt-get upgrade && sudo -u www-data php /var/www/owncloud/occ maintenance:mode --off
。
今、これは少し長いので、thrigの提案に従い、それをスクリプトに入れるという利点がありますが、彼の例には2つの欠点があります。戻り値を確認せず、コマンドのメンテナンスモードは次のコマンドに従います。メンテナンスモードに入るのとapt-getを起動することの間に遅延がある理由があるので、次のようなことがもっと欲しいかもしれません。
#!/bin/sh
set -e
sudo -u www-data php /var/www/owncloud/occ maintenance:mode --on || sudo -u www-data php /var/www/owncloud/occ maintenance:mode --on
sleep 1m || true
apt-get update || apt-get update
apt-get upgrade -y || apt-get install
sudo -u www-data php /var/www/owncloud/occ maintenance:mode --off || sudo -u www-data php /var/www/owncloud/occ maintenance:mode --off
しかし、あなたはすでに良い出発をしています。