質問: シェルスクリプトからubuntuサーバーをシャットダウンする方法は? 私はubuntuサーバーをシャットダウンするための簡単なシェルスクリプトを書きました。次に、毎日23:59にこのスクリプトを実行するcronジョブを作成しました。#!/bin/bash sudo shutdown -h now このエラーメッセージが表示されました:sudo: no tty present and no askpass program specified コードからsudoを削除すると、別のエラーメッセージが表示されました。/home/qinking126/scripts/test.sh: line 3: shutdown: command not found これを解決するにはどうすればよいですか?
回答: cronスクリプトがrootとして実行されていることを確認し、shutdownを次のコマンドで指定されたフルパスに置き換えます。command -v shutdown ubuntu gnu/linux(および一般的にgnu/linux)では、/sbin/shutdown:#!/bin/bash /sbin/shutdown -h now /etc/cron.d/midnight-shutdownのような名前で、以下を含むファイルを追加することに注意してください。59 23 * * * root test -x /sbin/shutdown && /sbin/shutdown -h now 完全なbashスクリプトのオーバーヘッドなしであなたが望むことをするべきです。これをすばやくインストールするためのコードは次のとおりです。echo '59 23 * * * root test -x /sbin/shutdown && /sbin/shutdown -h now' \ | sudo tee '/etc/cron.d/midnight-shutdow' sudo service cron reload 編集:あなたのコメントに返信するには、設定の別の可能性は次のとおりです:echo '59 23 * * * test -x /sbin/shutdown && /sbin/shutdown -h now' \ | sudo tee '/etc/cron.d/midnight-shutdow' sudo service cron reload cronがこのエラーメッセージを出力するのは非常に奇妙です。