小编bol*_*ino的帖子

通过虚拟环境运行 Django Python 命令的 Cron 作业不起作用

我有一个 crontab 文件,据说在加载项目虚拟环境后执行 Django 命令:

*/1 * * * * source /home/virtualenvs/mydjangoproject-venv/bin/activate && python /home/www/production/mydjangoproject/manage.py mydjangocommand
Run Code Online (Sandbox Code Playgroud)

...但它绝对没有任何作用。cron 日志输出没有特别的问题:

Mar 13 19:51:01 110 CRON[23807]: (root) CMD (source /home/virtualenvs/mydjangoproject-venv/bin/activate && python /home/www/production/mydjangoproject/manage.py mydjangocommand)
Run Code Online (Sandbox Code Playgroud)

不用说,当复制粘贴到 shell 中时,命令本身可以完美运行。

我知道它与我的 crontab 的环境变量有关,但我对这件事非常缺乏教育,而且我不知道该怎么做,尤其是当它在 python 虚拟环境下运行时。它应该使用我的用户环境变量吗?来自 virtualenv 的那些?如何实施?谢谢!

注意:如果有帮助,我的 crontab 环境变量有以下输出(当通过 crontab 将“env”导出到文件时):

HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
LANG=en_US.UTF-8
SHELL=/bin/sh
LC_ALL=en_US.UTF-8
PWD=/root
Run Code Online (Sandbox Code Playgroud)

以及项目虚拟环境下的以下环境变量:

TERM=xterm-256color
SHELL=/bin/bash
SSH_CLIENT=x.x.x.x 53007 22
OLDPWD=/root/production/mydjangoproject
SSH_TTY=/dev/pts/0
LC_ALL=en_US.UTF-8
USER=root
VIRTUAL_ENV=/home/virtualenvs/mydjangoproject-venv
MAIL=/var/mail/root
PATH=/home/virtualenvs/mydjangoproject-
venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/root
LANG=en_US.UTF-8
PS1=(mydjangoproject-venv)${debian_chroot:+($debian_chroot)}\u@$(hostname -f):\w\$ 
SHLVL=1
HOME=/root
LS_OPTIONS=--color=auto --group-directories-first
LOGNAME=root
SSH_CONNECTION=x.x.x.x 53007 x.x.x.x 22 …
Run Code Online (Sandbox Code Playgroud)

python environment-variables django cron

7
推荐指数
1
解决办法
3494
查看次数

在非标准 HTTP 端口下为运行其自己的 Web 服务器的应用程序添加 HTTPS 支持

我有一台运行 Debian 10 的服务器。它运行 Apache 2.4 以提供可在 下访问的 Web 服务https://example.com,这要归功于 LetsEncrypt 证书。

但它也运行一个应用程序 (Subsonic),它在端口 4040 上提供 Web UI,在它自己的 Web 服务器下,因为我没有它的 vhost,并且当 Apache 停止时它仍然可以访问。因此,目前该应用程序可通过 HTTP 访问http://example.com:4040

我知道如何为 Apache 虚拟主机添加 SSL 支持,但如何为该应用程序添加 HTTPS 支持,以便可以在https://example.com:4040或上访问它https://example.com:1234

另外,我是否应该使用与该域已有的 SSL 证书不同的 SSL 证书?

ssl http https apache-2.4

5
推荐指数
1
解决办法
707
查看次数

以“www-data”用户身份重新启动或重新加载Apache

我在我的 Debian/Apache2.4 服务器上有一个用 Python 编写的 webhook 脚本,以便它在推送 GitHub 时运行部署 .sh 脚本。因此,该脚本由标准 Apache 用户“www-data”执行。我的脚本需要重新启动或加载了Apache,但输出表示用户不必这样做的许可:Reloading apache2 configuration (via systemctl): apache2.serviceFailed to reload apache2.service: Access denied。手动执行时的行为与 www-data ( sudo -u www-data /etc/init.d/apache2 reload) 相同。

因此,我尝试通过将以下行添加到我的 visudo 中来使“www-data”具有重新加载或重新启动 Apache 的权限:(www-data ALL = NOPASSWD: /etc/init.d/apache2根据此文档)。

但它不会改变任何东西。为什么?是不是因为Apache无法重新加载自己?如何更改权限以执行此操作?或者我是否需要由另一个用户执行脚本,以及如何执行?

linux permissions bash sudo apache-2.4

1
推荐指数
1
解决办法
5397
查看次数