秘站小记

记录,思考

friendica 配置守护进程以及通过systemd管理

默认分类 0 评

friendica非常依赖worker进程来完成跟其他实例通讯,清理数据库,联系人同步等其他任务。
它可以通过cron计划任务定时工作,也可以通过守护进程进行完成。设置好守护进程可以立即发送任务,而不是等几分钟cron计划任务开始工作。

假设,系统是Ubuntu20.04 friendica的安装目录是/var/www/fedibar/

按照官方提供的教程运行 cd /var/www/fedibar/ php bin/daemon.php start时它会在 /run 目录创建一个PID。friendica会使用config/local.config.php文件system 下的pidfile目录配置。

'system' > [
     ...
  'pidfile' => '/run/friendica/daemon.pid',
     ...
  ],

我们将设置 systemd 以www-data用户身份运行该进程。但是只有root权在该/run目录中。所以我们创建一个 Friendica 指定的拥有www-data的子目录。当然可以手动创建,但是重启就消失。因此我们通过/etc/tmpfiles.d中的配置文件来执行此操作。首先通过命令在该目录创建 friendica.conf

sudo nano /etc/tmpfiles.d/friendica.conf

复制粘贴以下文件

d /run/friendica 0755 www-data www-data -

保存退出,这就systemd 可以通过www-data 用户组操作/run/friendica 的文件了。

如果现在执行

cd /var/www/fedibar/ php bin/daemon.php start

你会看到类似 信息

Starting worker daemon.
Child process started with pid 1276.

如果不是,您可能在config/local.config.php文件的 pidfile 目录填写错误了。
如果没有问题现在可以创建systemd文件了。

sudo nano /etc/systemd/system/friendica-daemon.service

复制粘贴以下文件

[Unit]
Description=Friendica daemon
After=network.target mariadb.service
Requires=network.target remote-fs.target nss-lookup.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/fedibar
Type=simple
StandardOutput=null
StandardError=syslog
ExecStart=/usr/bin/php ./bin/daemon.php start
ExecStop=/usr/bin/php ./bin/daemon.php stop
PIDFile=friendica/daemon.pid
PrivateTmp=true
InaccessibleDirectories=/home /root /boot /opt /mnt /media
ReadOnlyDirectories=/etc /usr
Restart=always

[Install]
WantedBy=multi-user.target

请注意,如果您使用的是MySQL 那第二行改成

After=network.target mysql.service

还有注意检查 WorkingDirectory 这是你安装friendica的目录。
确认没有问题后重新加载systemd配置

sudo systemctl daemon-reload

然后可以通过systemd启动守护进程了

sudo systemctl start friendica-daemon.service

检查状态

systemctl status friendica-daemon.service 

开机自动启动

systemctl enable friendica-daemon.service

搞定!

让sidekiq更快处理mastodon任务