运行 cli 'at' 命令通过 PHP 权限问题
Running cli 'at' command via PHP permissions issues
I.-前言
我有一个脚本,在执行时会运行以下代码行:
exec("echo 'cd /usr/share/nginx/myproject && /opt/rh/rh-php70/root/usr/bin/php artisan run:task mailer' | /usr/bin/at now +1 minute");
它通过at
命令成功安排了一个任务。我使用以下命令来验证它是否有效:
[root@acool2 ~]#
[root@acool2 ~]# atq
19 Thu Apr 4 13:17:00 2019 a nginx
[root@acool2 ~]#
我们可以看到,从左到右依次为:工号、日期、小时、年、队列和用户名.
II.- 问题
当满足预定时间时,命令运行但失败。以下信息写在/var/spool/mail/nginx:
[root@acool2 ~]# tail -f /var/spool/mail/nginx
Received: by acool2.localdomain (Postfix, from userid 993)
id 0E9CF30EBA39; Thu, 4 Apr 2019 13:17:01 -0700 (PDT)
Subject: Output from your job 19
To: nginx@acool2.localdomain
Message-Id: <20190404201701.0E9CF30EBA39@acool2.localdomain>
Date: Thu, 4 Apr 2019 13:17:00 -0700 (PDT)
From: nginx@acool2.localdomain (Nginx web server)
This account is currently not available
这显然是权限问题。请参见最终解决方案。
III.- 可能的解决方案
编辑 sudoers 文件并添加以下内容:
nginx ALL=(acool) NOPASSWD: /usr/bin/at
然后在PHP.
中使用以下命令
exec("sudo -u acool echo 'cd /usr/share/nginx/myproject && /opt/rh/rh-php70/root/usr/bin/php artisan run:task mailer' | /usr/bin/at now +1 minute");
参见最终解决方案。
IV.- 失败
编辑 sudoer 文件并调整 PHP 代码后,我仍然没有成功。 问题 仍在发生。
V.- 帮助
我们将不胜感激您的帮助和建议。感谢您的宝贵时间。
更新我
要报告一些进展。以下为 acool 安排了任务,但是...
exec("echo 'cd /usr/share/nginx/myproject && /opt/rh/rh-php70/root/usr/bin/php artisan run:task mailer' | sudo -u acool /usr/bin/at now +1 minute")
[acool@acool2 myproject]$ atq
43 Thu Apr 4 15:02:00 2019 a acool
[acool@acool2 myproject]$
... 问题 现在是 acool /var/spool/mail/acool :
[acool@acool2 ~]$ tail -f /var/spool/mail/acool
Received: by acool2.localdomain (Postfix, from userid 1001)
id 756B830EBA39; Thu, 4 Apr 2019 14:56:00 -0700 (PDT)
Subject: Output from your job 42
To: acool@acool2.localdomain
Message-Id: <20190404215600.756B830EBA39@acool2.localdomain>
Date: Thu, 4 Apr 2019 14:56:00 -0700 (PDT)
From: acool@acool2.localdomain
This account is currently not available.
更新二
使用 Barmar 建议,将 -E
标志添加到 sudo
并对 sudoers 文件进行以下更改:
nginx ALL=(acool) NOPASSWD: ALL
IMO 太自由了。
更新 III - 最终解决方案!
问题 是 SHELL
环境变量为 absent/missing 的结果。根本不需要编辑 sudoers 文件或使用 sudo
。将 export SHELL=\"/bin/bash\";
添加到原始命令即可。以下是工作解决方案:
exec("export SHELL=\"/bin/bash\"; echo 'cd /usr/share/nginx/myproject && /opt/rh/rh-php70/root/usr/bin/php artisan run:task mailer' | /usr/bin/at now +1 minute");
祝你好运!干杯:)
您正在 运行 将 echo
命令与 sudo
命令连接起来,它正在通过管道传输到普通的 at
命令。您需要 运行 at
命令改为 sudo
。
exec("echo 'cd /usr/share/nginx/myproject && /opt/rh/rh-php70/root/usr/bin/php artisan run:task mailer' | sudo -u acool /usr/bin/at now +1 minute")
I.-前言
我有一个脚本,在执行时会运行以下代码行:
exec("echo 'cd /usr/share/nginx/myproject && /opt/rh/rh-php70/root/usr/bin/php artisan run:task mailer' | /usr/bin/at now +1 minute");
它通过at
命令成功安排了一个任务。我使用以下命令来验证它是否有效:
[root@acool2 ~]#
[root@acool2 ~]# atq
19 Thu Apr 4 13:17:00 2019 a nginx
[root@acool2 ~]#
我们可以看到,从左到右依次为:工号、日期、小时、年、队列和用户名.
II.- 问题
当满足预定时间时,命令运行但失败。以下信息写在/var/spool/mail/nginx:
[root@acool2 ~]# tail -f /var/spool/mail/nginx
Received: by acool2.localdomain (Postfix, from userid 993)
id 0E9CF30EBA39; Thu, 4 Apr 2019 13:17:01 -0700 (PDT)
Subject: Output from your job 19
To: nginx@acool2.localdomain
Message-Id: <20190404201701.0E9CF30EBA39@acool2.localdomain>
Date: Thu, 4 Apr 2019 13:17:00 -0700 (PDT)
From: nginx@acool2.localdomain (Nginx web server)
This account is currently not available
这显然是权限问题。请参见最终解决方案。
III.- 可能的解决方案
编辑 sudoers 文件并添加以下内容:
nginx ALL=(acool) NOPASSWD: /usr/bin/at
然后在PHP.
中使用以下命令exec("sudo -u acool echo 'cd /usr/share/nginx/myproject && /opt/rh/rh-php70/root/usr/bin/php artisan run:task mailer' | /usr/bin/at now +1 minute");
参见最终解决方案。
IV.- 失败
编辑 sudoer 文件并调整 PHP 代码后,我仍然没有成功。 问题 仍在发生。
V.- 帮助
我们将不胜感激您的帮助和建议。感谢您的宝贵时间。
更新我
要报告一些进展。以下为 acool 安排了任务,但是...
exec("echo 'cd /usr/share/nginx/myproject && /opt/rh/rh-php70/root/usr/bin/php artisan run:task mailer' | sudo -u acool /usr/bin/at now +1 minute")
[acool@acool2 myproject]$ atq
43 Thu Apr 4 15:02:00 2019 a acool
[acool@acool2 myproject]$
... 问题 现在是 acool /var/spool/mail/acool :
[acool@acool2 ~]$ tail -f /var/spool/mail/acool
Received: by acool2.localdomain (Postfix, from userid 1001)
id 756B830EBA39; Thu, 4 Apr 2019 14:56:00 -0700 (PDT)
Subject: Output from your job 42
To: acool@acool2.localdomain
Message-Id: <20190404215600.756B830EBA39@acool2.localdomain>
Date: Thu, 4 Apr 2019 14:56:00 -0700 (PDT)
From: acool@acool2.localdomain
This account is currently not available.
更新二
使用 Barmar 建议,将 -E
标志添加到 sudo
并对 sudoers 文件进行以下更改:
nginx ALL=(acool) NOPASSWD: ALL
IMO 太自由了。
更新 III - 最终解决方案!
问题 是 SHELL
环境变量为 absent/missing 的结果。根本不需要编辑 sudoers 文件或使用 sudo
。将 export SHELL=\"/bin/bash\";
添加到原始命令即可。以下是工作解决方案:
exec("export SHELL=\"/bin/bash\"; echo 'cd /usr/share/nginx/myproject && /opt/rh/rh-php70/root/usr/bin/php artisan run:task mailer' | /usr/bin/at now +1 minute");
祝你好运!干杯:)
您正在 运行 将 echo
命令与 sudo
命令连接起来,它正在通过管道传输到普通的 at
命令。您需要 运行 at
命令改为 sudo
。
exec("echo 'cd /usr/share/nginx/myproject && /opt/rh/rh-php70/root/usr/bin/php artisan run:task mailer' | sudo -u acool /usr/bin/at now +1 minute")