如何处理启动文件上耗时的命令行?

如何处理启动文件上耗时的命令行?

我有一个命令,我希望在启动时仅自动运行一次。我找到的解决方案是将其放在登录shell会话的启动文件中,~/.profile.问题是这个命令相当耗时,导致初始化延迟很多。

怎么解决呢?我想要rclone来自 Google 云端硬盘的数据。

答案1

您所描述的内容并不要求或建议在 shell 初始化中执行此操作,而只是作为用户会话工作所需的单元。

如果你想这样做当您达到图形目标或多用户启动目标时,您只需确保启动系统具有它调用的启动脚本即可。

现在,你不用说你正在使用哪个启动系统,甚至不用说哪个操作系统——但读到“bash”,我想它是带有 systemd 的 Linux。

这使得这变得非常容易。就写一个所谓的系统单元文件然后您提出启动要求。这非常优雅,因为它可以在您的网络启动后立即运行,并且系统中的其他事物也可以并行初始化;由于同步文件主要是通过等待网络数据来绑定,这基本上不会给您的系统带来额外的负载,并且只要您登录即可完成同步。

一个 systemd 单元文件大致如下所示:

[Unit]
Description=Syncing stuff to and fro Google Drive

[Service]
Type=oneshot
ExecStart=/usr/bin/rclone --options-to-rclone --whatevers
Requires=network.target
After=network.target
# The following only if not right to run rclone as root
User=yourusername
Group=yourgroupnametypicallysameasusername

[Install]
WantedBy=multi-user.target
# use WantedBy=graphical.target instead if you need that to be done
# only when the system's ready to log in graphically

将其作为 .service 文件放在 systemd 系统服务文件目录中,例如/etc/systemd/system/rsync-googledrive.server,然后sudo systemctl enable rsync-googledrive确保该服务在引导时启动。

相反,您也可以将其放入用户服务中~/.config/systemd/user/;在这种情况下删除User=和行,并将该行替换为。Group=WantedBy=WantedBy=default.target

相关内容