Arch LinuxシステムRTCウォッチスクリプトが実行されない

Arch LinuxシステムRTCウォッチスクリプトが実行されない

私はrtc.service次の分野でサービスを提供しています/etc/systemd/system

[Unit]
Description=RTC Service

[Install]
WantedBy=multi-user.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/scripts/script_rtc.sh

しかし、script_rtc.sh存在し実行可能です。

[user@comp001 scripts]# ls -asl script_rtc.sh
4 -rwxr-xr-x 1 root root 79 Jan  1 01:04 script_rtc.sh
[user@comp001 scripts]#

/scripts/script_rtc.sh以下は、i2cを介してのみリアルタイムクロックを有効にするスクリプトです。

[user@comp001 scripts]# cat script_rtc.sh
#!/bin/sh

sudo echo "ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device"
[user@comp001 scripts]#

systemclt -u rtc.service結果は次のとおりです。

Jan 01 01:00:10 comp001 systemd[1]: Starting RTC Service...
Jan 01 01:00:12 comp001 systemd[1]: rtc.service: main process exited, code=exited, status=203/EXEC
Jan 01 01:00:12 comp001 systemd[1]: Failed to start RTC Service.
Jan 01 01:00:12 comp001 systemd[1]: Unit rtc.service entered failed state.
Jan 01 01:00:12 comp001 systemd[1]: rtc.service failed.

さて、エコーをテストするためにスクリプト自体を修正しました。

#!/bin/sh

echo "ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device"

これで、以下を実行して制御できます。systemctlしかし、そうすれば次のようになります。

#!/bin/sh

echo "ds1307 0x68" > /sys/class/i2c-adapter/i2c-1/new_device

I get error:
[root@comp001 scripts]# ./script_rtc.sh 
./script_rtc.sh: line 3: echo: write error: Invalid argument
[root@comp001 scripts]#

なぜ? ?

ベストアンサー1

どちらにしてもスクリプトは実行されません。

  • シェルから始めましょう
  • check noexec、 SELinux など (セキュリティ制限に関係なく)
  • スクリプトの最初の行でshebangを確認してください(#の前のスペース、!の前のスペース、存在することを確認してください/bin/sh)。

ちなみに:

  • sudoスクリプトから削除され、すでにrootとして実行されています。
  • リダイレクトを引用しないでくださいecho "foo" > fileecho "foo > file"

しかし、

スクリプトが実行されるという保証はありません。後ろに i2c-1初期化されたので競争条件ここで。スクリプトを完全に使用するよりも、udevルールを使用する方が良いです。

ACTION=="add", SUBSYSTEM=="i2c", ATTR{name}=="<contents of file /sys/class/i2c-adapter/i2c-1/name>", ATTR{new_device}="ds1307 0x68"

この行をに入れてください/etc/udev/rules.d/99-i2c-rtc.rules

おすすめ記事