use*_*817 7 python bash systemd 18.04
我有一个从网页下载图像并将其设置为我的桌面墙纸的脚本。代码工作正常,但我无法让它在启动时运行。
我试图通过配置 systemd 来管理服务来做到这一点。(重新启动时,crontab 对我不起作用,但这是另一个问题)。
我做了一个文件/etc/systemd/system/apod.service:
[Unit]
Description=Set APOD as Desktop
[Install]
WantedBy=multi-user.target
[Unit]
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/bin/bash /home/me/apod.sh
Type=simple
User=me
Group=me
WorkingDirectory=/home/me
Restart=on-failure
Run Code Online (Sandbox Code Playgroud)
但是当我启动时它似乎不起作用。如果我检查systemctl status apod,我会看到:
Jun 04 20:55:55 me-XPS-15-9500 systemd[1]: Started Set APOD as Desktop.
Jun 04 20:55:57 me-XPS-15-9500 gsettings[1598]: failed to commit changes to dconf: Could not connect: No such file or directory
Run Code Online (Sandbox Code Playgroud)
但是,如果我只是手动运行,/bin/bash /home/me/apod.sh那么它可以完美运行。
欢迎任何建议。我正在运行 18.04。
为了完整性:
bash脚本:
#!/bin/sh
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"
python /home/me/apod.py
/usr/bin/gsettings set org.gnome.desktop.background picture-uri "file:///home/me/Downloads/apod.jpg"
Run Code Online (Sandbox Code Playgroud)
它调用的python脚本:
from bs4 import BeautifulSoup as BSHTML
import requests
import subprocess
import urllib2
page = urllib2.urlopen('https://apod.nasa.gov/apod/astropix.html')
soup = BSHTML(page,features="html.parser")
images = soup.findAll('img')
url = 'https://apod.nasa.gov/apod/'+images[0]['src']
r = requests.get(url, allow_redirects=True)
with open('/home/me/Downloads/apod.jpg',"w") as f:
f.write(r.content)
Run Code Online (Sandbox Code Playgroud)
您无法更改系统启动脚本中的背景,因为您的图形环境尚未启动。我建议将脚本添加到 gnome-tweaks 中的启动应用程序中。
这实际上有两个部分。
一是您正在进行的 gsettings 更改 - 这实际上是永久性的,不需要重复,除非其他东西正在更改它并且您想要重置它,或者如果您想要更改文件名。
另一种是下载图像,如果您替换文件而不是使用新名称,它可能会立即更改。
下载也可能在启动时失败,因为尽管存在 network-online.target 依赖性,但运行时网络可能尚未完全启动。解决这个问题会延迟系统启动——这可能在登录启动期间完成会更好。
jpb*_*ain -1
正如您所说,它是通过手动执行来工作的,我认为您应该通过 crontab 选择不同的方式。
执行:
sudo crontab -e
然后在末尾添加一行,如下所示
@reboot /bin/bash /home/me/apod.sh
重新启动并查看是否有效。
您还可以更改 @reboot ,它只会在启动后运行一次,每小时左右运行一次(请参阅 cron 手册)。
像这样的事情(在 crontab 中)将每小时一次。
0 * * * * /bin/bash /home/me/apod.sh
希望这可以帮助。祝你好运。