GNU/Linux >> Linux の 問題 >  >> Linux

cron の代わりに systemd タイマーを使用する

この質問に対する答えは、 User=nobody を交換することです User=ziga ではありません しかし User=root/etc/systemd/system/battery.service 内 .どういうわけかユーザー ziga でも sudo を使用するすべての権限を持っています コマンド systemctl hibernate を実行できません bashスクリプトの内部。なぜこれが起こるのか本当にわかりません。したがって、作業ファイルは次のようになります:

/etc/systemd/system/battery.service

[Unit]
Description=Preko skripte preveri stanje baterije in hibernira v kolikor je stanje prenizko

[Service]
Type=oneshot
ExecStart=/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript
User=root
Group=systemd-journal

/etc/systemd/system/battery.timer

[Unit]
Description=Periodical checking of battery status every two minutes

[Timer]
OnBootSec=2min
OnUnitActiveSec=2min 

[Install]
WantedBy=battery.service

/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript

#!/bin/sh
/usr/bin/acpi -b | /usr/bin/awk -F'[,:%]' '{print $2, $3}' | (
        read -r status capacity
        if [ "$status" = Discharging ] && [ "$capacity" -lt 7 ]; then
                /usr/bin/systemctl hibernate
        fi
)

試してみましたが、User=ziga でも動作します または User=nobody /usr/bin/systemctl hibernate を変更する必要があります sudo /usr/bin/systemctl hibernate に 最後のスクリプトで。 User のように見えます 変数はどういうわけか問題ではありません...ああ、最後のスクリプトから絶対名を削除して、最初の行を #!/bin/sh から変更することもできます #!/bin/bash へ . WantedBy=timers.target も変更しました WantedBy=battery.service/etc/systemd/system/battery.timer 内 .

ほらね。低バッテリでラップトップを休止状態にするための最良の cron 代替手段。 =)


次のように、起動後に最初の起動を追加してみてください:

[Timer] OnBootSec=15min OnUnitActiveSec=2m


Linux
  1. cronjobsの代わりにsystemdタイマーを使用する

  2. systemdを使用してスタートアップを管理する

  3. トラブルシューティングツールとしてsystemdの使用を開始します

  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. Systemdは/etc/init.dスクリプトをどのように使用しますか?

  3. 古いSysvinitの習慣をSystemdに移植しますか?

  1. Centos – / usr / lib / systemd/systemと/etc/ systemd / systemの違いは何ですか?

  2. 1 時間ごとに実行可能ファイルを実行するように cron ジョブを設定する方法は?

  3. @reboot が CRON で機能しない