标签: bash

.sh 脚本中用于 cron 作业的漂亮命令

我有一个需要在共享虚拟主机上运行的 php 脚本。我创建了一个执行 sh 脚本的 cron 作业。我的 crontab 中的命令是:

/bin/sh /home/user/script.sh

我假设它是 Bourne Shell(或兼容的东西)。脚本本身是:

#!/bin/sh
cd /home/user/public_html/folder/
#updating DB
php -q ./run_interactive_job.php batch_control_files/updateDB
echo Updated DB results
Run Code Online (Sandbox Code Playgroud)

我有以下问题
我可以为 php 命令添加很好的优先级吗?或者我是否需要在 cron 命令中将其添加到脚本中。

哪一个更有可能工作?

nice 10 php -q ./run_interactive_job.php batch_control_files/updateDB

上述命令在以较低优先级运行时会成功吗?

PS:基本上,这个脚本在我通过浏览器运行它之前已经使服务器过载,它影响了该服务器上的 APACHE,导致我的主机阻止了该文件。我一再要求他们解锁以使用不同的参数对其进行测试。现在我试图以较低的优先级通过 cron 运行它 - 希望它不会影响 APACHE。但我不希望它再次产生问题,因此我尝试使用nice

更新:我使用了那里显示的批处理文件。我在批处理文件中的 php 之前使用了 nice 命令。唯一的区别是:

nice -n 10 php -q ./run_interactive_job.php batch_control_files/updateDB

我添加了命令来运行其他具有相同属性的 php 脚本。他们都工作得很好。

感谢大家的输入@sm4rk0 答案解决了我的问题

apache-http-server bash cron php nice

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

在bash中通过参数移动光标的方法?

在 bash 中,您可以使用 Mf 和 Mb 将光标向前和向后移动一个单词,但是有没有办法向前或向后移动一个参数?如果不是开箱即用,也许是通过某种配置?

换句话说,我想光标在下面标记的位置之间导航。

cp "foo bar.txt" "/tmp/directory with space"
^  ^             ^
|  |             |
Run Code Online (Sandbox Code Playgroud)

bash shell readline

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

将文件分解为字符串,每个文件都基于第一个字母。巴什

好的,所以我有一个包含数千个字符串的文件。每个人都在自己的线上。我想制作一个脚本,允许我获取这个文件,调用它list.txt,并从每一行中获取项目,并根据第一个字母或数字将其放入单独的文件中。例如,假设文件的前几行是这样的:

cheese
pizza
pepperoni
lettuce
grahamCrackers
0-0Foods
chicken
lentils
1-2Items
Run Code Online (Sandbox Code Playgroud)

我需要把它分解成这些:

文件

cheese
chicken
Run Code Online (Sandbox Code Playgroud)

文件

grahamCrackers
Run Code Online (Sandbox Code Playgroud)

文件

lettuce
lentils
Run Code Online (Sandbox Code Playgroud)

文件

pizza
pepperoni
Run Code Online (Sandbox Code Playgroud)

0.txt

0-0Foods
Run Code Online (Sandbox Code Playgroud)

1.txt

1-2Items
Run Code Online (Sandbox Code Playgroud)

我想在 OS X 上用 BASH 完成这个。谢谢。

哦,如果有帮助的话。每行上的项目永远不会有空格,它们将始终包含为一个单词。EG(从不鸡汤,而是鸡汤)

script bash parsing

5
推荐指数
2
解决办法
1432
查看次数

通过 CTRL-D 在 bash 退出时执行什么方法?

类似岗位cd,我已经覆盖exit到做到以下几点:

function exit() { $HOME/script.sh && builtin exit "$@"; }
Run Code Online (Sandbox Code Playgroud)

虽然这在exit直接调用时按预期工作,但是当 shell 通过 CTRL-D 退出时,它不会执行,或者,如果它确实执行,脚本就无法完成。

是什么赋予了?exit使用 CTRL-D 时是否调用了其他方法?

bash

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

Vim 在后台执行进程

我想在 Mac OS X(或一般的 Unix)上的 Vim 中在后台运行一个进程。

我希望并期待以下或一些变体来实现这一点:

execute "!my_command &"
Run Code Online (Sandbox Code Playgroud)

或者

!my_command &
Run Code Online (Sandbox Code Playgroud)

或者

!my_command \&
Run Code Online (Sandbox Code Playgroud)

或其他一些替代方案。

不幸的是,这似乎根本没有执行my_command。我希望有一些轻量级的选择。

一种选择是编写一个包装器脚本来分叉命令并退出,但我确定有人已经这样做了(GNU Parallel?)。

实现这一目标的最佳方法是什么?

bash vim macos

5
推荐指数
2
解决办法
5839
查看次数

Bash 脚本:“[[:未找到”

这是我的代码:

#!/bin/bash
if [[ -d ~/viwiki ]]; then
 cd ~/viwiki
else
 mkdir ~/viwiki
 cd ~/viwiki
fi
if ! [[ -d ./log ]]; then
 mkdir log
 mkdir log/log
 mkdir "log/wget"
elif ! [[ -d ./log/log ]]; then
 mkdir log/log
elif ! [[ -d "./log/wget" ]]; then
 mkdir "log/wget"
fi
Run Code Online (Sandbox Code Playgroud)

运行时,出现错误:

tuankiet65@UbuntuPC:~$ sh viwik/test2.sh
viwik/test2.sh: 2: viwik/test2.sh: [[: not found
viwik/test2.sh: 8: viwik/test2.sh: [[: not found
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

bash bash-scripting

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

如何退出 OS X 中的 sudo 权限

在我执行一个命令后,是否有一个命令可以取消用户的 sudo 权限,例如sudo pmset sleep 0当我尝试执行另一个 sudo 命令时,它会再次要求我输入密码?

目前,在一个 sudo 命令之后,它将执行任何其他命令,而无需询问我的密码。该命令exit似乎不起作用。

terminal sudo bash osx-mountain-lion macos

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

在 /etc/passwd 文件中用 /bin/false 替换 /bin/bash

我正在编写一个程序来禁用系统中的用户,我想替换/bin/bash/bin/false.

例子

xxx:x:1:22:xx:/export/home/xx:**/bin/bash**
Run Code Online (Sandbox Code Playgroud)

替换为

xxx:x:1:22:xx:/export/home/xx:**/bin/false**
Run Code Online (Sandbox Code Playgroud)

我想使用 bash 脚本。

我知道一种方法是使用sed. 但我不擅长正则表达式。

任何人都可以帮忙吗?

script bash solaris

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

Vim 在同一个窗口中执行 bash 命令/make

当我尝试运行诸如:make或 之类的命令时:!ls,它会在完全不同的屏幕/视图中显示输出,并且在此过程中我正在编辑的文件不可见。无论如何我仍然可以看到我的文件并进行编辑,而我执行的命令可能可以在底部的窗口中运行,可能是快速修复窗口?

linux bash vim

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

如何在 Linux 终端中实际键入 CTRL-A?

如何调用Ctrl-a在 Linux 终端会话中。我正在尝试使用屏幕共享屏幕。

打开多用户的命令是Ctrl- A:multiuser on ,我知道如何按键盘上的Ctrl+aCtrl-的命令行版本是a什么?

我将如何键入Ctrl- A:multiuser on,而没有 Linux 告诉我找不到该命令?

linux terminal bash gnu-screen

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