首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Rock64 SBC上运行服务

无法在Rock64 SBC上运行服务
EN

Unix & Linux用户
提问于 2021-08-16 15:28:58
回答 1查看 60关注 0票数 0

我有一个python脚本,它将当前的IP地址和时间显示在我的设备上的液晶屏幕上(Rock64 SBC)。

python脚本可以自己运行。

代码语言:javascript
复制
from subprocess import check_output
from time import sleep
from datetime import datetime
from RPLCD.i2c import CharLCD
lcd = CharLCD('PCF8574', 0x27, auto_linebreaks=False)
lcd.clear()
def get_ip():
    cmd = "hostname -I | cut -d\' \' -f1"
    return check_output(cmd, shell=True).decode("utf-8").strip()
while True:
    lcd_line_1 = datetime.now().strftime('%b %d  %H:%M:%S')
    lcd_line_2 = "IP " + get_ip()

    lcd.home()
    lcd.write_string(f'{lcd_line_1}\r\n{lcd_line_2}')
    sleep(10)

然后,lcd.service的服务代码是:

代码语言:javascript
复制
[Unit]
Description=LCD IP Display
After=multi-user.target

[Service]
Type=simple
ExecStart=/bin/sh -c "python3 /home/rock64/pi/lcd_ip.py"
WorkingDirectory=/home/rock64/pi
Restart=always
User=rock64

[Install]
WantedBy=multi-user.target

systemctl状态lcd.service显示:

代码语言:javascript
复制
rock64@rock64:/etc/systemd/system$ systemctl status lcd.service
● lcd.service - LCD IP Display
   Loaded: loaded (/etc/systemd/system/lcd.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2021-08-19 15:10:11 CDT; 11s ago
  Process: 5029 ExecStart=/bin/sh -c python3 /home/rock64/pi/lcd_ip.py (code=exited, status=1/FAILURE)
 Main PID: 5029 (code=exited, status=1/FAILURE)

Aug 19 15:10:11 rock64 systemd[1]: lcd.service: Service hold-off time over, scheduling restart.
Aug 19 15:10:11 rock64 systemd[1]: lcd.service: Scheduled restart job, restart counter is at 15.
Aug 19 15:10:11 rock64 systemd[1]: Stopped LCD IP Display.
Aug 19 15:10:11 rock64 systemd[1]: lcd.service: Start request repeated too quickly.
Aug 19 15:10:11 rock64 systemd[1]: lcd.service: Failed with result 'exit-code'.
Aug 19 15:10:11 rock64 systemd[1]: Failed to start LCD IP Display.
rock64@rock64:/etc/systemd/system$ journalctl _PID=5029
-- Logs begin at Sun 2018-01-28 09:58:18 CST, end at Thu 2021-10-14 12:18:00 CDT. --
Aug 19 15:10:10 rock64 sh[5029]: Traceback (most recent call last):
Aug 19 15:10:10 rock64 sh[5029]:   File "/home/rock64/pi/lcd_ip.py", line 5, in 
Aug 19 15:10:10 rock64 sh[5029]:     lcd = CharLCD('PCF8574', 0x27, auto_linebreaks=False)
Aug 19 15:10:10 rock64 sh[5029]:   File "/home/rock64/.local/lib/python3.6/site-packages/RPLCD/i2c.py", line 168, in __i
Aug 19 15:10:10 rock64 sh[5029]:     auto_linebreaks=auto_linebreaks)
Aug 19 15:10:10 rock64 sh[5029]:   File "/home/rock64/.local/lib/python3.6/site-packages/RPLCD/lcd.py", line 98, in __in
Aug 19 15:10:10 rock64 sh[5029]:     self._init_connection()
Aug 19 15:10:10 rock64 sh[5029]:   File "/home/rock64/.local/lib/python3.6/site-packages/RPLCD/i2c.py", line 173, in _in
Aug 19 15:10:10 rock64 sh[5029]:     self.bus = SMBus(self._port)
Aug 19 15:10:10 rock64 sh[5029]: PermissionError: [Errno 13] Permission denied

我有chmod +x,主要的python文件以及i2c.py和lcd.py文件。

ls -ls显示

代码语言:javascript
复制
rock64@rock64:~/pi$ ls -la lcd_ip.py
-rwxr-xr-x 1 rock64 sudo 500 Aug 13 17:08 lcd_ip.py

最后,我在visudo中添加了以下几行

代码语言:javascript
复制
rock64 ALL=(ALL) NOPASSWD: /etc/systemd/system/lcd.service
rock64 ALL=(ALL) NOPASSWD: /home/rock64/pi/lcd_ip.py
rock64 ALL=(ALL) NOPASSWD: /home/rock64/.local/lib/python3.6/site-packages/RPLCD/ic2.py
rock64 ALL=(ALL) NOPASSWD: /home/rock64/.local/lib/python3.6/site-packages/RPLCD/lcd.py

我仍然得到“错误13的许可被拒绝”。

有什么建议吗?

EN

回答 1

Unix & Linux用户

发布于 2021-08-20 16:12:03

我必须做两件事:在服务文件中,将ExecStart更改为

代码语言:javascript
复制
ExecStart=/usr/bin/python3 /home/rock64/pi/lcd_ip.py

然后我运行sudo visudo并添加

代码语言:javascript
复制
rock64 ALL=(ALL) NOPASSWD: ALL
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/664903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档